2

以下の NetDataContractSerializer msdn 状態について

「NetDataContractSerializer は、シリアル化と逆シリアル化の両方の端が同じ CLR 型を共有している場合にのみ使用できます」。

私の理解では、NetDataContractSerializer を使用して .net4.0 でファイルをシリアル化し、後ですべてのコードを .net4.5 にシフトした場合、.net 4.0 のファイルはコードが同じであっても逆シリアル化されません。

私の理解が間違っている場合は修正してください。

4

2 に答える 2

2

種類によって異なります。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 のセットアップはありませんが、直接テストできます。

于 2012-06-11T10:44:19.187 に答える
-1

DotNet は COM テクノロジに基づいているため、dotnet 4.0 と dotnet 4.5 はバイナリ互換性があると思います。つまり、同じ CLR タイプを持ち、逆シリアル化されます。

こちらをご覧ください:フレームワーク 4.5 の互換性に関する MSDN ブログ

于 2012-06-11T10:20:50.693 に答える