2013-07-10 59 views
2

我有以下DataContract:注意:我沒有更改DataContract的權限。我只參考它。反序列化c#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> 

難道我錯過了什麼嗎?我一整天都在討論這個問題。謝謝您的幫助!

回答

2

默認情況下,數據協定包含枚舉成員名稱,而不是數值。在使用數據合同模型時,如果接收方是WCF客戶端,則導出的模式會保留數字值。

這隻簡單的方法來解決它改變datacontract以這種方式現在

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

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

,如果你不能編輯datacontract,你可能有一個很大的問題......

我假設發送方沒有使用WCF(爲什麼鎖定datacontract?爲什麼會出現錯誤的定義?),並且使用正確的數據協定模型非常重要:它不適用於xml文件。

+0

事實是,我可以編輯datacontract,但僅限於本地端。我想我會給這個鏡頭。 – Gerald