[英]wcf deserialize enum as string
我正在嘗試使用WCF使用RESTful Web服務。 我無法控制Web服務的格式,所以我必須在這里和那里做一些解決方法。 然而,我似乎無法解決的一個主要問題是如何使WCF將枚舉反序列化為字符串。
這是我的代碼(顯然名稱已更改):
[DataContract]
public enum Foo
{
[EnumMember( Value = "bar" )]
Bar,
[EnumMember( Value = "baz" )]
Baz
}
[DataContract]
public class UNameIt
{
[DataMember( Name = "id" )]
public long Id { get; private set; }
[DataMember( Name = "name" )]
public string Name { get; private set; }
[DataMember( Name = "foo" )]
public Foo Foo { get; private set; }
}
這是反序列化失敗的返回數據:
{
"id":123456,
"name":"John Doe",
"foo":"bar"
}
最后,拋出異常:
反序列化Service.Foo類型的對象時出錯。 值'bar'無法解析為'Int64'類型。
我不想切換到使用XmlSerializer,因為在它的許多其他缺點中,它不會讓我在屬性上擁有私有的setter。
如何使WCF(或者,DataContractSerializer)將我的枚舉視為字符串值?
編輯 :這似乎是不可能的,行為是它的設計方式。 謝謝微軟,不給我們選擇,不得不訴諸黑客。 按照somori建議的方式這樣做似乎是獲得帶有JSON和WCF的字符串枚舉的唯一方法。
這可能是一個愚蠢的問題。
如果你這樣做會發生什么
[DataMember( Name = "foo" )]
private string foo { get; private set; }
public Foo Foo
{
get
{
return Foo.Parse(foo);
}
}
?
我知道這是一個老帖子,但我認為值得一提。
我收到一個類似的錯誤,其中json字符串的反序列化失敗,似乎反序列化為錯誤的類型。
對我來說,修復是在將json字符串發送到服務器之前簡單地對其進行URL編碼。 一個簡單但容易犯的錯誤。
HttpUtility.UrlEncode(JSONInstruction) /*remember to encode the string*/
呃..? 枚舉不是整數? 例外是有效的。 我不知道如果這有幫助: http : //msdn.microsoft.com/en-us/library/aa347875.aspx
這可能正在發生,因為setter是私有的,報告的錯誤是誤導性的。 Foo是第一個被反序列化的屬性,因為沒有公共setter可用它會引發異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.