これは、WCF コントラクトが列挙型を異なる方法で処理するために発生する可能性が最も高いです。データ コントラクトの場合、クラスをDataContract
属性でマークし、メンバーを属性でマークしDataMember
ます。あまり知られていないのは、列挙型には、EnumMember
WCF が列挙型を適切にシリアル化するために使用する独自の属性があるということです。
Enumeration Types in Data Contractsと呼ばれる MSDN の記事があり、使用法がより詳細に説明されています。この記事のコード例は、列挙型のコントラクトがどのように見えるかを示しています。
[DataContract]
public class Car
{
[DataMember]
public string model;
[DataMember]
public CarConditionEnum condition;
}
[DataContract(Name = "CarCondition")]
public enum CarConditionEnum
{
[EnumMember]
New,
[EnumMember]
Used,
[EnumMember]
Rental,
Broken,
Stolen
}
彼らの例 (上に示したもの) では、必要に応じてデータ コントラクトの一部として列挙値のサブセットのみを設定できることに注意してください。
これに加えて、DataMember
属性でタグ付けされていないプロパティは、ネットワーク経由でシリアル化されません。これは、シリアル化が WCF で機能することを確認するためのチェックリストです。
- クラスが
DataContract
属性でマークされていることを確認してください。
- プロパティが属性でマークされていることを確認してください
DataMember
。
- 個々の列挙値が
EnumMember
属性でマークされていることを確認してください。