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

标签 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;
    }
    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 is an invalid collection type since it have DataContractAttribute

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

[DataContract]
class MyCollection1
{
    [DataMember]
    public List<MyData> items;

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

}

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

最佳答案

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

有关详细信息,请参阅 here .

关于c# - InvalidDataContractException 是无效的集合类型,因为它具有 DataContractAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22730259/

相关文章:

android - SOAP 和 WCF android 之间有什么区别

c# - 为什么我的 POST 方法不起作用?

wcf - 什么是 WCF(以及优缺点)?

c# - 您如何在连接中包含第一个表中的所有字段,以及剩余的一些字段?

c# - 从本地驱动器(资源)加载文件作为存储文件

c# - 何时连接事件处理程序 asp.net

Android SQLite 数据库异常 - 代码 14(无法打开数据库文件)

C# 列格式化

PHP - 生产环境的明智/优雅/优雅的错误处理

Objective-C 框架错误处理