0

データコントラクトのリストをシリアル化する方法はありますか? 次のようなリストのデータコントラクトを作成しました。

[DataContract]
class ItemList<T>
{
    public ItemList()
    {
       items=new List<T>();
    }

    [DataMember]
    public List<T> items;    
}

属性 [Name="Config"] を持つ Config、Config_V1、Config_V2 の 3 つのクラスがあり、Config クラスの 3 つのバージョン間でバージョン管理を使用できます。したがって、この Config クラスの ItemList 間でシリアライズおよびデシリアライズしたいと考えています。私は次のようなことを試しました:

ItemList<ConfigData_V1> l = new ItemList<ConfigData_V1>();
l.items.Add(config);
WriteObject<ItemList<ConfigData_V1>>("serialization.bin", l);
ItemList<ConfigData_V2> l2;
l2=ReadObject<ItemList<ConfigData_V2>>("serialization.bin");

しかし、ReadObj でデシリアライズすると、ConfigData_V2 のリストが必要であるというエラーが表示されますが、ConfigData_V1 のリストが見つかりました。この競合を解決するには、ConfigData クラスのバージョン管理を使用するだけではないでしょうか?

4

1 に答える 1

2

オブジェクト ( List<Contract1>) をデシリアライズすると、メタデータが追加されて、a-データが List の一部であり、b-それを含むオブジェクトが であることを指定しますContract1

書き込まれた実際の XML を見ると、ノードにこれが表示されます。

その結果、読み込みを行おうとするとList<Contract2>、モデルの定義が壊れます。これは、含まれているデータが. Contract1Contract2

[KnownType(Type)]Contract2 が既知のタイプであると述べた場合に役立つ可能性のある属性がありますが、これはコントラクトContract1の概念全体を実際に破るものです......

于 2012-06-12T16:22:42.003 に答える