0

无论如何要序列化数据合同列表吗?我为列表创建了一个数据合同,如下所示:

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

    [DataMember]
    public List<T> items;    
}

我有 3 个类 Config、Config_V1、Config_V2,其属性为 [Name="Config"],这让我可以在 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>您会破坏模型的定义,因为您告诉它包含的数据是Contract1但您尝试读取Contract2.

如果您声明 Contract2 是一种已知类型,但它确实打破了合同的整个概念,那么有一个属性[KnownType(Type)]可能会对您有所帮助......Contract1

于 2012-06-12T16:22:42.003 回答