XmlSerializer不会显示对现有实例的更改

Lea*_*der 1 c# xml deserialization

我google了很多,它仍然没有工作,所有我的int和字符串等不会改变他们的valaues

我的de//序列化代码:

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
Run Code Online (Sandbox Code Playgroud)

以下是我参与序列化的类,没有所有空白:

public class Stundenplan
{
    public Fach[] faecher = new Fach[100];
    public int fachnr = 0;
Run Code Online (Sandbox Code Playgroud)

.......(很多空洞)}

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;
Run Code Online (Sandbox Code Playgroud)

....(也有几个空洞)}

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

    public Hausaufgabe()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

什么是遗失/错误?

Dam*_*Arh 6

问题出在以下几行:

stu = (Stundenplan)xs.Deserialize(reader);
Run Code Online (Sandbox Code Playgroud)

您将值反序列化为另一个实例(stu而不是this),该方法在方法结束时丢弃.您应该重写这样的deserialization()方法:

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

当然,你应该改变你调用它的方式:

Stundenplan sp = Stundenplan.deserialization();
Run Code Online (Sandbox Code Playgroud)

代替

Stundenplan sp = new Stundenplan();
sp.deserialization();
Run Code Online (Sandbox Code Playgroud)