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

C# XmlSerializer不显示对现有实例的更改,c#,xml,deserialization,C#,Xml,Deserialization,我已经在谷歌上搜索了很多次,但仍然不起作用,我所有的int和string等都没有改变它们的值 我的反序列化/序列化代码: public void serialize() { XmlSerializer xs = new XmlSerializer(typeof(Stundenplan)); TextWriter writer = new StreamWriter(@"daten.xml"); xs.Serialize(writer, this); writer.Close

我已经在谷歌上搜索了很多次,但仍然不起作用,我所有的int和string等都没有改变它们的值

我的反序列化/序列化代码:

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;
……(许多空隙) }

..(还有一些空隙) }


有什么遗漏/错误???

问题在下面一行:

stu = (Stundenplan)xs.Deserialize(reader);
您正在将值反序列化到另一个实例(
stu
,而不是在方法末尾丢弃的
this
)中。您应该像这样重写
反序列化()
方法:

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();

问题出现在以下行中:

stu = (Stundenplan)xs.Deserialize(reader);
您正在将值反序列化到另一个实例(
stu
,而不是在方法末尾丢弃的
this
)中。您应该像这样重写
反序列化()
方法:

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();

你能发布daten.xml的内容吗?你有什么问题?将反序列化为局部变量。您应该在哪里看到更改?为了确保释放daten.xml文件,您应该将流读取器和流写入器包装在using中,而不仅仅是调用close。这确保了垃圾收集将释放下次运行时使用的资源。Dispose还为您调用close。除了给出的答案(这是正确的)之外,请注意很少有序列化程序允许您反序列化到现有实例中。有些是这样,但作为例外。你能发布daten.xml的内容吗?你有什么问题?将反序列化为局部变量。您应该在哪里看到更改?为了确保释放daten.xml文件,您应该将流读取器和流写入器包装在using中,而不仅仅是调用close。这确保了垃圾收集将释放下次运行时使用的资源。Dispose还为您调用close。除了给出的答案(这是正确的)之外,请注意很少有序列化程序允许您反序列化到现有实例中。有些是这样,但作为例外。我还有一个问题,当我实现try-catch时,我应该返回什么?我还有一个问题,当我实现try-catch时,我应该返回什么??