2

我有以下 DataContract: 注意:我无权更改 DataContract。我只是参考它。

 [Serializable]
 [DataContract]
 public class Client
 {
     public Client();
 [DataMember]
 public string Name { get; set; }
 [DataMember]
 public List<Contact> Contacts { get; set; }
 }

在联系人中:

 [Serializable]
 [DataContract]
 public class Contact
 {
      public Contact();
 [DataMember]
 public string ContactName { get; set; }
 [DataMember]
 public ContactTypes ContactType { get; set; }
 }

ContactTypes 是一个枚举:

[Serializable]
[DataContract]
public enum ContactTypes
{
     [EnumMember(Value="Phone")]
     Phone = 1,

     [EnumMember(Value="Mail")]
     Mail = 2
}

我的问题是当我反序列化我的 xml 时。它显示错误:无法反序列化无效的枚举值“1”。

这是我的xml:

 <Clients>
 <Client>
      <Name>Firstname</Name>
      <Contacts>
           <Contact>
               <ContactName>ContactName</ContactName>
               <ContactType>1</ContactType>
           </Contact>
      </Contacts>
</Client>
</Clients>

我在这里错过了什么吗?我一整天都在思考这个问题。谢谢您的帮助!

4

1 回答 1

2

默认情况下,数据协定包括枚举成员名称,而不是数值。使用数据契约模型时,如果接收方是 WCF 客户端,则导出的架构会保留数值。

这是解决以这种方式更改数据合同的唯一简单方法

[Serializable]
[DataContract]
public enum ContactTypes
{
     [EnumMember(Value="1")]
     Phone = 1,

     [EnumMember(Value="2")]
     Mail = 2
}

现在,如果您无法编辑数据合同,您可能会遇到一个大问题......

我想发送方没有使用 WCF(为什么要锁定数据合同?为什么定义不好?),使用正确的数据合同模型非常重要:它不适合 xml 文件。

于 2013-07-10T06:55:56.023 回答