我具有以下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>
我在这里错过了什么吗?我整天都在解决这个问题。谢谢您的帮助!
最佳答案
默认情况下,数据协定包括枚举成员名称,而不是数值。使用数据协定模型时,如果接收方是WCF客户端,则导出的架构将保留数值。
这是解决它以这种方式更改数据契约的唯一简单方法
[Serializable]
[DataContract]
public enum ContactTypes
{
[EnumMember(Value="1")]
Phone = 1,
[EnumMember(Value="2")]
Mail = 2
}
现在,如果您无法编辑数据合同,则可能会遇到很大的问题...
我想发送方没有使用WCF(为什么要锁定datacontract?为什么定义不正确?),所以使用正确的数据协定模型真的很重要:它不适合xml文件。