InvalidDataContractException 是无效的集合类型,因为它具有 DataContractAttribute

Posted

技术标签:

【中文标题】InvalidDataContractException 是无效的集合类型,因为它具有 DataContractAttribute【英文标题】:InvalidDataContractException is an invalid collection type since it have DataContractAttribute 【发布时间】:2014-05-08 22:38:49 【问题描述】:

我有这个代码:

[DataContract]
class MyData

    private Int32 dato1;
    [DataMember]
    public Int32 Dato1
    
        get  return dato1; 
        set  dato1 = value; 
    

    public MyData(Int32 dato1)
    
        this.dato1 = dato1;
    
    public MyData()
    
        this.dato1 = 0;
    


[DataContract]
class MyCollection2 : List<MyData>

    public MyCollection2()
    
    


然后我尝试序列化 MyCollection2 的一个对象:

MyCollection2 collec2 = new MyCollection2();
collec2.Add(new MyData(10));
DataContractSerializer ds = new DataContractSerializer(typeof(MyCollection2));
using (Stream s = File.Create(dialog.FileName))

    ds.WriteObject(s, collec2);

然后我得到下一个异常:

InvalidDataContractException 是一个无效的集合类型,因为它 有 DataContractAttribute

但是,如果我使用下一个类(不直接从 List 继承,而是有一个 List 成员):

[DataContract]
class MyCollection1

    [DataMember]
    public List<MyData> items;

    public MyCollection1()
    
        items = new List<MyData>();
    


这里序列化工作正常。你知道为什么吗 ?。 非常感谢。

【问题讨论】:

【参考方案1】:

使用[CollectionDataContract(...)] 而不是[DataContract]。更多详情请见here。

详情请见here。

【讨论】:

只需添加 [CollectionDataContract] 即可解决,谢谢!

以上是关于InvalidDataContractException 是无效的集合类型,因为它具有 DataContractAttribute的主要内容,如果未能解决你的问题,请参考以下文章