2011-10-31 84 views
4

可能重複:
JSON serialization of c# enum as string在JSON序列化枚舉值(C#)

我有兩個類,如下所示:

Transaction 
    int OrderNumber 
    // ... snip ... 
    IEnumerable<Item> Items 

Item 
    string Sku 
    // ... snip ... 
    ItemCategory Category 

ItemCategory是一個枚舉,看起來像這個:

[DataContract] 
public enum ItemCategory 
{ 
    [EnumMember(Value = "Category1")] 
    Category1, 

    [EnumMember(Value = "Category2")] 
    Category2 
} 

我的兩個類都根據需要用DataContract和DataMember屬性裝飾。

我正在嘗試獲取事務項目的JSON表示。中的事務,我有一個看起來像這樣的公共方法:

public string GetJsonRepresentation() 
{ 
    string jsonRepresentation = string.Empty; 

    DataContractJsonSerializer serializer = new DataContractJsonSerializer(this.GetType()); 
    using (MemoryStream memoryStream = new MemoryStream()) 
    { 
     serializer.WriteObject(memoryStream, this); 
     jsonRepresentation = Encoding.Default.GetString(memoryStream.ToArray()); 
    } 

    return jsonRepresentation; 
} 

此函數返回一個字符串,它看起來像這樣:

{ 
    "OrderNumber":123, 
    "Items":[{"SKU": "SKU1","Category": 0}] 
} 

這就是我想要的,只是一個事實,即「類別「每個項目的枚舉值被序列化爲整數值,而不是我在EnumMember屬性中指定的值。我怎樣才能得到它,所以返回的JSON看起來像「Category」:「Category1」而不是「Category」:0?

回答

3

請看看JSON serialization of enum as string堆棧溢出。沒有沒有可以使用的特殊屬性。 JavaScriptSerializer將枚舉序列化爲它們的數值而不是它們的字符串表示。您需要使用自定義序列化來將枚舉序列化爲名稱而不是數值。

+0

錯誤,請使用StringEnumConverter。如果您只希望它是單個實例中的字符串,或者在您的序列化程序設置中包含轉換器以將枚舉全局轉換爲字符串,反之亦然,請使用裝飾器指定它 – wallacer

+2

@wallacer @DeveloperX實際上是正確的。 'StringEnumConverter'是一個Json.Net屬性,不能用於基礎.Net –

+0

@LukeMarlin啊,好的。謝謝澄清! – wallacer