首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetDataContractSerializer和CLR类型

NetDataContractSerializer和CLR类型
EN

Stack Overflow用户
提问于 2012-06-11 18:02:13
回答 2查看 1.2K关注 0票数 2

对于下面的NetDataContractSerializer msdn状态

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-11 18:44:19

这取决于类型。NetDataContractSerializer基于类型的完整类型名称,可能使用程序集的完整名称进行限定。例如,下面的代码:

代码语言:javascript
复制
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编译将产生以下结果:

代码语言:javascript
复制
<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编译的相同代码将生成以下代码:

代码语言:javascript
复制
<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版的安装程序,但你可以直接测试它。

票数 2
EN

Stack Overflow用户

发布于 2012-06-11 18:20:51

由于DotNet是基于COM技术的,我相信DotNet4.0和DotNet4.5是二进制兼容的,这意味着它们具有相同的CLR类型,并且将被反序列化。

你可以看看这里:MSDN blog on compatibility of Framework 4.5

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10978000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档