我在谷歌上搜索了很多,但仍然无法正常工作,我所有的 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()
{
}
}
缺少什么/错了什么??
最佳答案
问题出在下面一行:
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();
关于c# - XmlSerializer 不显示对现有实例的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8375239/