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)
什么是遗失/错误?
问题出在以下几行:
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)