XmlSerializer не показывает изменения в существующем экземпляре - PullRequest
1 голос
/ 04 декабря 2011

Я много гуглил, и он все еще не работает, все мои int, Strings и т. Д. Не меняют свои значения

Мой код для де- / сериализации:

public void serialize()
{
   XmlSerializer xs = new XmlSerializer(typeof(Stundenplan));
   TextWriter writer = new StreamWriter(@"daten.xml");
   xs.Serialize(writer, this);
   writer.Close();
}  //seems to work since the xml file looks good

public void deserialization()
{
   XmlSerializer xs = new XmlSerializer(typeof(Stundenplan));
   TextReader reader = new StreamReader(@"daten.xml");
   Stundenplan stu;
   stu = (Stundenplan)xs.Deserialize(reader);
}  // don't see any change

Вот мои классы, участвующие в сериализации, без всех пустот:

public class Stundenplan
{
    public Fach[] faecher = new Fach[100];
    public int fachnr = 0;

....... (много пустот) }

public class Fach
{
    public String name;
    public bool[] stunden = new bool[8];
    public Hausaufgabe[] hausaufgaben = new Hausaufgabe[10000];
    public int hausaufgabennr = 0;
    public String lehrer;

.... (также несколько пустот) }

public class Hausaufgabe
{
    public DateTime datum;
    public String beschreibung;
    public bool gemacht;

    public Hausaufgabe()
    {
    }
}

Чего не хватает / не так ??

1 Ответ

6 голосов
/ 04 декабря 2011

Проблема в следующей строке:

stu = (Stundenplan)xs.Deserialize(reader);

Вы десериализуете значение в другой экземпляр (stu вместо this), который вы выбрасываете в конце метода,Вам следует переписать метод deserialization() следующим образом:

public static Stundenplan deserialization()
{
    XmlSerializer xs = new XmlSerializer(typeof(Stundenplan));
    TextReader reader = new StreamReader(@"daten.xml");
    return (Stundenplan)xs.Deserialize(reader);
}

Конечно, вам также следует изменить способ его вызова:

Stundenplan sp = Stundenplan.deserialization();

вместо

Stundenplan sp = new Stundenplan();
sp.deserialization();
...