gpt4 book ai didi

c# - NetDataContractSerializer 和 CLR 类型

转载 作者:太空宇宙 更新时间:2023-11-03 13:59:53 24 4
gpt4 key购买 nike

对于下面的 NetDataContractSerializer msdn 状态

“仅当序列化端和反序列化端共享相同的 CLR 类型时,才能使用 NetDataContractSerializer”。

我的理解是,如果我使用 NetDataContractSerializer 在 .net4.0 中序列化文件,然后我将所有代码转移到 .net4.5,那么即使代码相同,使用 .net 4.0 的文件也不会被反序列化。

如果我的理解有误,请指正。

最佳答案

这取决于类型。 NetDataContractSerializer 基于类型全类型名,可能用程序集全名限定。例如,这段代码:

List<string> list = new List<string>();
list.Add("joe");
list.Add("sam");

NetDataContractSerializer ser = new NetDataContractSerializer();
using (FileStream stream = File.OpenWrite("test.xml"))
{
ser.Serialize(stream, list);
}

使用 CLR 2 编译会产生这个:

<ArrayOfstring z:Id="1" z:Type="System.Collections.Generic.List`1[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" z:Assembly="0" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"><_items z:Id="2" z:Size="4"><string z:Id="3">joe</string><string z:Id="4">sam</string><string i:nil="true"/><string i:nil="true"/></_items><_size>2</_size><_version>2</_version></ArrayOfstring>

使用 CLR 4 编译的相同代码将生成以下内容:

<ArrayOfstring z:Id="1" z:Type="System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" z:Assembly="0" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"><_items z:Id="2" z:Size="4"><string z:Id="3">joe</string><string z:Id="4">sam</string><string i:nil="true"/><string i:nil="true"/></_items><_size>2</_size><_version>2</_version></ArrayOfstring>

如您所见,它们不兼容,因为它们包含 System.String 的程序集限定全名。所以这将取决于你做什么,但很有可能它不会像现在这样工作。我手边没有 4.5 设置,但您可以直接测试它。

关于c# - NetDataContractSerializer 和 CLR 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10978000/

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