【问题标题】:InvalidDataContractException is an invalid collection type since it have DataContractAttributeInvalidDataContractException 是无效的集合类型,因为它具有 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>();
    }

}

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

【问题讨论】:

    标签: c# wcf exception serialization datacontract


    【解决方案1】:

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

    详情请见here

    【讨论】:

    • 只需添加 [CollectionDataContract] 即可解决,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    相关资源
    最近更新 更多