簡體   English   中英

wcf將enum反序列化為字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM