データコントラクト例外。シリアル化できません 質問する

データコントラクト例外。シリアル化できません 質問する

次の WCF DataContract があります。

[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 でホストされています)、次のエラーが発生します。

System.Runtime.Serialization.InvalidDataContractException: 型 'MyNamespace.Occupant' はシリアル化できません。DataContractAttribute 属性でマークし、シリアル化したいすべてのメンバーを DataMemberAttribute 属性でマークすることを検討してください。型がコレクションの場合は、CollectionDataContractAttribute でマークすることを検討してください。

メソッドの 1 つは、List型の を返しますOccupant。これが原因でしょうか?

ベストアンサー1

1 つ以上の初期化コンストラクターを提供しているため、パラメーターなし (デフォルト) のコンストラクターも追加する必要があります。

つまり、以下を追加する必要があります:

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

これは、デフォルトコンストラクタが消える明示的なコンストラクターを追加する場合。

[メソッドはシリアル化されていないため、 を返すメソッドに問題は発生しませんList<Occupant>。]

おすすめ記事