gpt4 book ai didi

c# - 如何反序列化已更改类型的旧数据?

转载 作者:太空狗 更新时间:2023-10-29 17:50:12 24 4
gpt4 key购买 nike

我有为以下类使用二进制序列化存储的数据:

[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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com