作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有为以下类使用二进制序列化存储的数据:
[Serializable]
public abstract class BaseBusinessObject
{
private NameValueCollection _fieldErrors = new NameValueCollection();
protected virtual NameValueCollection FieldErrors
{
get { return _fieldErrors; }
set { _fieldErrors = value; }
}
...
}
在某些时候,类被更改为:
[Serializable]
public abstract class BaseBusinessObject
{
private Dictionary<string, string> _fieldErrors = new Dictionary<string, string>();
protected virtual Dictionary<string, string> FieldErrors
{
get { return _fieldErrors; }
set { _fieldErrors = value; }
}
...
}
这会导致反序列化旧数据时出现问题。
我的第一个想法是实现 ISerializable
,但是这个类有很多属性以及数百个继承类,我也必须实现它。
我想在反序列化期间更改旧数据以匹配当前结构,或者有一种干净的方式来升级旧数据。
最佳答案
在不同的名称下添加新的_fieldErrors
,例如_fieldErrors2
,并使其成为[Optional]
.然后执行 [OnDeserialized]
将数据从 _fieldErrors
复制到 _fieldErrors2
(如果存在)并清除 _fieldErrors 的方法。
关于c# - 如何反序列化已更改类型的旧数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1260771/
我是一名优秀的程序员,十分优秀!