这很可能发生,因为 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
属性。