gpt4 book ai didi

.net - ISerializable 和向后兼容性

转载 作者:行者123 更新时间:2023-12-04 14:36:04 27 4
gpt4 key购买 nike

我必须使用一个旧应用程序,该应用程序使用 binaryFormatter 将应用程序数据序列化为文件流(例如在名为“data.oldformat”的文件中)
没有任何优化,主类已用属性标记

<serializable()>public MainClass
.......
end class

和序列化代码
dim b as new binaryformatter
b.serialize(mystream,mymainclass)

为了优化序列化/反序列化过程,我只是让类实现 ISerializable 接口(interface)并编写了一些优化的序列化例程
<serializable()>public MainClass
implements ISerializable
.......
end class

优化效果非常好,但我必须找到一种方法来重新获取旧文件中的数据以实现向后兼容性。

我怎样才能做到这一点??

皮尔路易吉

最佳答案

最大 有一个很好的答案,但是我会像这样实现它,它使用 SerializationEntry.GetEnumerator()而不是 try/catch .这种方式更清洁,速度更快。

public MainClass(SerializationInfo info, StreamingContext context) {
int version = 0;
foreach (SerializationEntry s in info)
{
if (s.Name == "version")
{
version = (int)s.Value;
break;
}
}

switch (version) {
case 0:
// deserialize "old format"
break;
case 1:
// deserialize "new format, version 1"
break;
default:
throw new NotSupportedException("version " + version + " is not supported.");
}
}

我更喜欢使用 .FirstOrDefault() 的 LINQ 版本,但是 SerializationInfo 没有实现 IEnumerable - 表面上,奇怪的是,它甚至没有实现旧的 IEnumerable 接口(interface)。

关于.net - ISerializable 和向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2613874/

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