Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# InvalidDataContractException是无效的集合类型,因为它具有DataContractAttribute_C#_Wcf_Exception_Serialization_Datacontract - Fatal编程技术网

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

C# InvalidDataContractException是无效的集合类型,因为它具有DataContractAttribute,c#,wcf,exception,serialization,datacontract,C#,Wcf,Exception,Serialization,Datacontract,我有以下代码: [DataContract] class MyData { private Int32 dato1; [DataMember] public Int32 Dato1 { get { return dato1; } set { dato1 = value; } } public MyData(Int32 dato1) { this.dato1 = dato1; }

我有以下代码:

[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()
    {
    }

}
然后我得到了下一个例外:

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

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

[DataContract]
类别MyCollection1
{
[数据成员]
公共清单项目;
公共MyCollection1()
{
项目=新列表();
}
}
这里序列化工作正常。你知道为什么吗?。
非常感谢。

使用
[CollectionDataContract(…)]
而不是
[DataContract]
。有关更多详细信息,请参阅


有关详细信息,请参见。

仅添加
[CollectionDataContract]
即可为我解决问题,谢谢!
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);
}
[DataContract]
class MyCollection1
{
    [DataMember]
    public List<MyData> items;

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

}