【问题标题】:How to change a serialized object?如何更改序列化对象?
【发布时间】:2012-04-19 03:42:10
【问题描述】:

我有很多以 XML 格式保存的序列化对象,但我想为这些对象添加 2 个变量。

这是我的对象:

public class MyObject{
    public Int32 MyVariables = 0;
}

这个对象已经被序列化了很多次,我想保留将这些“旧”文件读入我的应用程序的能力。

但是我需要多加几个变量才能让对象更好,比如:

public class MyObject{
    public Int32 MyVariables = 0;
    public Dictionary<string,MyEnum> MyDict = new Dictionary<string,MyEnum>();
}

谁能建议添加这些新变量的最佳方法?我实际上更改了 MyObject 并添加了字典,我相信它不再被正确读取。

提前致谢!

编辑:我也无法在任何地方捕获异常以查看在读取对象时失败的位置,我这样做是为了这样做:

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
object obj = formatter.Deserialize(File.Open(Path, FileMode.Open));

编辑 2:我相信这实际上可能是由于我使用枚举作为字典的一部分,我在枚举上方添加了 [Serializable],但它仍然不起作用 - 想法?

【问题讨论】:

    标签: c# serialization


    【解决方案1】:

    只需添加新变量。

    如果 XML 序列化程序没有为新变量找到合适的表示,它将使用默认值初始化它们。

    【讨论】:

    • 我认为这会起作用(实际上,如果我只是将类型设置为 int 与字典,那么字典是否默认不可序列化?)
    • 您不能使用 XML 序列化器序列化字典。但是,有一些解决方法。我会尝试挖掘一个链接。
    • 这是将 Dictionary 与 XML Serializer 结合使用的一种方法...johnwsaunders3.wordpress.com/2009/03/10/…
    • Eric 我对现在使用这个类有点困惑......我基本上只是创建了一个 DictionaryProxy 类型的变量,但我想我不应该这样做吗?正如我后来调用 .ToDictionary() 并继续添加/访问它,它似乎不像普通字典那样工作
    • 如果 DictionaryProxy 令人困惑,请查看此替代方法。它更简单......只是 Dictionary weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx 的替代品
    猜你喜欢
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    相关资源
    最近更新 更多