我有一个WCF服务,其枚举定义为 -
public enum Operator
{
Equals,
NotEquals,
GreatherThan,
LessThan
}
DataContract声明为 -
[DataContract]
public class PropertyQuery
{
[DataMember]
public string PropertyName { get; set; }
[DataMember]
public Operator Operator { get; set; }
[DataMember]
public string PropertyValue { get; set; }
}
OperationContract声明为 -
[OperationContract]
string GetClientData(string clientName, [Optional] PropertyQuery propertyQuery);
然而,当我使用SoapUI发送'GetClientData()'请求时,只为第一个参数'clientName'传递值,并为'propertyQuery'参数留下空白 -
<tem:GetClientData>
<tem:clientName>AV</tem:clientName>
<!--Optional:-->
<tem:propertyQuery>
<!--Optional:-->
<wcf:Operator></wcf:Operator>
<!--Optional:-->
<wcf:PropertyName></wcf:PropertyName>
<!--Optional:-->
<wcf:PropertyValue></wcf:PropertyValue>
</tem:propertyQuery>
</tem:GetClientData>
我收到以下消息 -
无效的枚举值''无法反序列化为'WCFService2.Operator'类型。确保存在必要的枚举值,并且如果类型具有DataContractAttribute属性,则使用EnumMemberAttribute属性标记。'。
我知道这个错误是有道理的 但是如何使'propertyQuery'成为可选的,因此'Operator'是可选的,并且摆脱了这个错误。
请指导。
答案 0 :(得分:1)
完全按照错误消息告诉您,并使用EnumMember属性标记枚举成员。 见http://msdn.microsoft.com/en-us/library/aa347875%28v=vs.110%29.aspx
[DataContract]
public enum Operator
{
[EnumMember]
Equals,
[EnumMember]
GreatherThan,
[EnumMember]
LessThan,
[EnumMember]
NotEquals,
}