比方说,我有一个像这样编写的C#数据合约
[DataContract]
public class GiftCard
{
[DataMember(IsRequired = true, EmitDefaultValue = false)]
public PaymentMethod MethodOfPayment;
}
[DataContract]
[Flags]
public enum PaymentMethod
{
[EnumMember]
Mastercard = 0,
[EnumMember]
Visa = 1
}
然后使用SOAPUI测试它,故意不指定值。
<soapenv:Body>
<GiftCardTest>
<GiftCard>
<MethodOfPayment></MethodOfPayment>
</GiftCard>
</GiftCardTest>
</soapenv:Body>
到达我的服务方法
我缺少什么属性?我该如何验证?
答案 0 :(得分:2)
删除Flags属性就可以了。
[DataContract]
public enum PaymentMethod
{
[EnumMember]
Mastercard = 0,
[EnumMember]
Visa = 1
}
它现在抛出异常:
无效的枚举值&#39;&#39;无法反序列化为类型&#39; PaymentMethod&#39; ...
答案 1 :(得分:0)
当它对值进行去杠杆化时,如果在反序列化期间找不到要使用的有效值,则必须设置默认值。因此它使用default(PaymentMethod)
,这与执行(PaymentMethod)default(int)
相同。
default(int)
的值为0,您必须将0设为无效的枚举值或使MethodOfPayment
为空,因此默认值为null
而不是0。