用JSON(C#)序列化枚举值

Serializing enum values in JSON (C#)

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
JSON serialization of c# enum as string

我有两个班,如下所示:

1
2
3
4
5
6
7
8
9
Transaction
    int OrderNumber
    // ... snip ...
    IEnumerable<Item> Items

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

itemcategory是一个如下所示的枚举:

1
2
3
4
5
6
7
8
9
[DataContract]
public enum ItemCategory
{
    [EnumMember(Value ="Category1")]
    Category1,

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

我的两个类根据需要用datacontract和datamember属性修饰。

我正在尝试获取事务项的JSON表示。在事务中,我有一个如下的公共方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
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;
}

这将返回一个如下所示的字符串:

1
2
3
4
{
   "OrderNumber":123,
   "Items":[{"SKU":"SKU1","Category": 0}]
}

这是我想要的,除了每个项的"category"枚举值被序列化为其整数值,而不是我在enummember属性中指定的值。我如何才能得到它,使JSON返回的看起来像"category":"category1",而不是"category":0?


请将枚举的JSON序列化视为堆栈溢出中的字符串。不,没有可以使用的特殊属性。JavaScriptSerializer将枚举序列化为其数值,而不是字符串表示形式。您需要使用自定义序列化将枚举序列化为其名称,而不是数字值。