次の 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>
。]