【问题标题】:Invalid enum value '' cannot be deserialized into type无效的枚举值“”不能反序列化为类型
【发布时间】:2015-01-18 08:21:57
【问题描述】:

我有一个 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”设为可选并消除此错误。

请指导。

【问题讨论】:

  • 留空是什么意思,能不能显示请求?
  • 使用 SoapUI 请求更新
  • @iniki 你是怎么解决这个问题的?

标签: wcf


【解决方案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,  
}  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多