我正在开发一个程序,我通过序列化 Project 类来保存它的项目文件。 因为我还在研究它,一些属于 Project 类的类会不时发生变化(例如类有新属性)。它使“简单的”反序列化变得不可能。
有什么办法可以解决吗?我的意思是,没有编写自定义序列化程序? (这可能比我现在的水平还高)
以防万一,我使用的是 BinaryFormatter。
最佳答案
希望我正确理解了您的问题。您将一个类序列化为一个文件,此后您在程序中进行了更改(例如,您添加了另一个属性)。现在你想从文件中反序列化这个类。只要您只添加 新属性,这就不是问题。它们将被反序列化器忽略。它创建您的类的一个新实例(这就是可序列化类必须具有默认构造函数的原因)并尝试填充它在流中找到的属性以进行反序列化。如果您更改属性的类型或删除属性,您将无法反序列化原始文件。
删除属性的一种解决方法是将它们保留在类中,但停止在程序的其余部分使用它们。已更改为不同类型的属性的解决方法可能如下所示:
[Serializable]
public class MyClass
{
int? newProperty;
[XmlElement("Property")]
public string OldProperty
{
get { return string.Empty; }
set
{
if (!newProperty.HasValue)
{
int temp;
if (int.TryParse(value, out temp))
{
newProperty.Value = temp;
}
}
}
}
public int NewProperty
{
get { return newPropery.HasValue ? newProperty.Value : 0; }
set { newProperty.Value = value; }
}
}
关于c# - 更改类的反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8076669/