当前位置: 首页 > 知识库问答 >
问题:

Datacontract例外。无法序列化

柴丰
2023-03-14

我有以下WCF数据合同:

[DataContract]
public class Occupant
{
    private string _Name;
    private string _Email;
    private string _Organization;
    private string _Badge;

    public Occupant(string name, string badge, string organization)
    {
        Name = name;
        Badge = badge;
        Organization = organization;
    }

    public Occupant(string name, string badge)
    {
        Value = name;
        Key = badge;
    }

    [DataMember]
    public string Key
    {
        get { return _Name; }
        set { _Name = value; }
    }

    [DataMember]
    public string Value
    {
        get { return _Badge; }
        set { _Badge = value; }
    }

    [DataMember]
    public string Name
    {
        get { return _Name; }
        set { _Name = value; }
    }

    [DataMember]
    public string Email
    {
        get { return _Email; }
        set { _Email = value; }
    }

    [DataMember]
    public string Organization
    {
        get { return _Organization; }
        set { _Organization = value; }
    }

    [DataMember]
    public string Badge
    {
        get { return _Badge; }
        set { _Badge = value; }
    }
}

当我试图通过Web浏览器访问此服务(它托管在IIS上),我得到了这个错误:

系统运行时。序列化。InvalidDataContractException:类型“MyNamespace”。无法序列化“占用者”。考虑使用DATACONTractAttor属性对其进行标记,并标记要使用DATAMEMBAREATE属性序列化的所有成员。如果类型是集合,请考虑用CopyDATAcNoTractAttor标记它。

我的方法之一是返回类型的列表。这会导致它吗?


共有3个答案

壤驷经国
2023-03-14

您需要一个默认的无参数构造函数。我从来没有计划实际使用我的,所以我为IntelliSense添加了一个摘要,并抛出一个运行时异常以阻止它被使用。

/// <summary>
/// parameterless default constructor only for serialization
/// </summary>
public MyClass() { throw new NotImplementedException("parameterless default constructor only for serialization"); }
赵选
2023-03-14

尝试添加一个空构造函数。这通常会触发序列化程序。

钮善
2023-03-14

因为您提供了一个或多个初始化构造函数,所以还需要添加一个无参数(默认)构造函数。

i、 e.您需要添加:

[DataContract]
public class Occupant
{
    // *** Needed only for Serialization
    public Occupant() {}
    ...

这是因为添加显式构造函数时默认构造函数将消失。

[问题不在于返回List的方法

 类似资料: