gpt4 book ai didi

C# 序列化对象版本

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:04 26 4
gpt4 key购买 nike

我有以下情况。在我的 C# 应用程序中,我有一个使用 XmlSerializer 序列化的类。该类非常复杂,我类的一个对象作为应用程序文件保存在本地磁盘上,稍后可以打开(经典的保存工作和重新打开工作)。我的问题是在开发过程中,被序列化的对象的类可能会改变。我想要一个版本系统,它允许我的应用程序意识到保存的 xml 属于旧版本但仍然可以打开。旧的应用程序版本也无法打开新的 xml 版本。

例如:

class ComplexObject
{
public string settings1;
public string settings2;
}

我序列化对象,在生产中发送应用程序。明天我的课变成了

class ComplexObject
{
public string settings1;
public string settings2;
public string settings3;
}

我的新版本的应用程序将如何打开旧类定义的序列化对象以及新类定义,并且在将文件加载到对象(反序列化)时没有错误

欢迎任何建议和基本示例!

谢谢

最佳答案

这完全取决于序列化器的选择。在 XmlSerializer 的情况下,这很好并且可以正常工作;具有新值的客户端将加载新值;没有意愿的客户不会。示例:

var reader = XmlReader.Create(new StringReader(
@"<ComplexObject><foo>123</foo><bar>abc</bar></ComplexObject>"));
var ser = new XmlSerializer(typeof (ComplexObject));
var obj = (ComplexObject)ser.Deserialize(reader);

与:

public class ComplexObject
{
public string foo;
}

它工作并加载 foo 但不是 bar

不要为此使用 BinaryFormatter - 这会导致世界受到伤害。如果您想要二进制输出,请考虑像 protobuf-net 这样的东西,它被设计为公开适应版本控制。

关于C# 序列化对象版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11756684/

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