這很可能發生,因爲WCF合約對待枚舉的方式不同。對於數據合同,您使用DataContract
屬性標記該類,並使用DataMember
屬性標記該成員。衆所周知的是,枚舉具有自己的屬性,稱爲EnumMember
,WCF用它來正確地序列化它們。
有一篇名爲Enumeration Types in Data Contracts的MSDN文章,詳細介紹了該用法。從文章的示例代碼顯示了一個枚舉合同應該是什麼樣子:
[DataContract]
public class Car
{
[DataMember]
public string model;
[DataMember]
public CarConditionEnum condition;
}
[DataContract(Name = "CarCondition")]
public enum CarConditionEnum
{
[EnumMember]
New,
[EnumMember]
Used,
[EnumMember]
Rental,
Broken,
Stolen
}
注意,在他們的榜樣(這我上面附帶),您可以設置只枚舉值的子集的一部分數據合同,如果這是一個要求。
除此之外,沒有標記爲DataMember
屬性的任何屬性將不會通過線路序列化。這應該是確保序列化適用於WCF的清單:
- 檢查類是否標有
DataContract
屬性。
- 檢查屬性是否標有
DataMember
屬性。
- 檢查單個枚舉值是否標有
EnumMember
屬性。
感謝您的幫助。我自動生成代理和數據類,所以WCF應該照顧這個嗎?但是,我手動編輯了Reference.cs並添加了您建議的屬性,但沒有任何更改。 – chrinetr
您創建的WCF端點或與外部JAX-WS Web服務的連接是否存在錯誤?如果是JAX-WS Web服務,您是否可以將枚舉發送到WCF之外? –
我找到了解決方案。如果您爲它們分配了值,則有幾個屬性需要設置相關的屬性。例如,可能有Foobar元素和另一個IsFoobarSet。只有當IsFoobarSet = true時,Foobar元素纔會被創建。不要問我爲什麼這樣實施。看起來對我來說很不尋常,但我對這個東西很陌生,所以這可能是一個超級邏輯的理由。 – chrinetr