Autor Beitrag
BCT1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Fr 22.10.10 18:40 
Ich hab folgendes Problem mit dem XML-Serializer. Ich hab ein Objekt dass ich speichern will. Die Klasse des Objekts hab ich hier etwas vereinfacht, aber sieht etwa so aus:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
[Serializable]
public class Daten
{
    public int wert1;
    public int wert2;
    public Wert wert3;
    
    public void Save(Daten objekt)
    {
        // Get the path of the save game
        string fullpath = @"C:\Neuer Ordner\Save.sav";

        // Open the file, creating it if necessary
        File.Delete(fullpath);
        FileStream stream = File.Open(fullpath, FileMode.OpenOrCreate);
        try
        {
            // Convert the object to XML data and put it in the stream
            XmlSerializer serializer = new XmlSerializer(typeof(Daten));
            serializer.Serialize(stream, objekt);
        }
        finally
        {
            // Close the file
            stream.Close();
        }
    }
}
[Serializable]
public class Wert
{
    public int wert;
    public Wert(int wert1, int wert2, int wert3)
    {
        wert = wert1 + wert2 + wert3;
    }
}


Ich erstelle also ein neues Objekt von "Daten" und weise "wert3" ein "Wert"-Objekt zu. Wenn ich jetzt speichern will kommt der Fehler:
"Fehler beim Reflektieren des Typs 'ConsoleApplication1.Daten'."
Ich hab rausgefunden, dass es an dem Konstruktor der Klasse "Wert" liegt, denn wenn ich den wegmache klappt alles. Das Problem ist aber, dass ich den Konstruktor brauche, da ich mir durch ihn viel Arbeit spare.
Kann man es irgendwie hinkriegen, dass es mit Konstruktor funktioniert?

Gruß
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 22.10.10 19:19 
Der Serializer braucht einen parameterlosen Konstruktor für die zu serialisierende Klasse. Ein Klasse ohne definierten Konstruktor bekommt einen implizit vom Compiler verpasst, da er ja sonst nicht zu erzeugen wäre. Sobald du aber einen eigenen anderen Konstruktor definierst bekommt die Klasse keinen automatischen parameterlosen Konstruktor da der Typ ja jetzt einen ~offiziellen~ Weg hat um erzeugt werden zu können.

Lange Rede kurzer Sinn. Du musst deiner Klasse noch selbst einen eigenen parameterlosen Konstruktor verpassen.
BCT1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Fr 22.10.10 19:36 
Jetzt geht es! Danke

-BCT1