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

标签 c# xml deserialization

我在谷歌上搜索了很多,但仍然无法正常工作,我所有的 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/

相关文章:

c# - 从 WordNet 获取名词和形容词列表

c# - 使用 LINQ 合并列中的非分组元素

rust - Rust-使用serde/reqwest “Invalid type”反序列化

spring-mvc - 使用spring MVC中的一组项目处理表单发布

c# - 将 DocumentDB 与表单例份验证和角色结合使用

c# - 使用 xml linq 和 c# 遍历特定属性并获取其最低值

xml - 使用 Groovy+Smooks 向现有 XML 添加命名空间声明

sql-server - 用Transact-SQL替换所有记录中的多个XML属性值?

使用 "&", "®"解析 xml,但仍然出现错误

java - GSON 正确序列化枚举,但将其反序列化为字符串