无效的枚举值''无法反序列化为类型

时间:2015-01-18 08:21:57

标签: wcf

我有一个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'是可选的,并且摆脱了这个错误。

请指导。

1 个答案:

答案 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,  
}