Скажут, например, у меня есть контракт данных C# написанного как этогоПочему WCF десериализация пустых строк в качестве действительных перечислений
[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>
Он прибывает в мой метод обслуживания как действительный
Какие атрибуты мне не хватает? Как это подтвердить?
Когда вы установили 'Flags', значение' String.Empty' будет интерпретироваться как «no flags set», которое равно 0. Если вы используете флаги, ваш первый флаг должен начинаться с 1. Однако просто удаление 'Flags' имеет наибольший смысл в этом случае, потому что не имеет смысла иметь «MethodOfPayment», одновременно являющуюся как Visa, так и Mastercard. –
Спасибо Скотту. Флаги были реликвией из другого перечисления с непересекающимися индексами. –