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

时间:2011-10-31 16:05:00

标签: c# json serialization

  

可能重复:
  JSON serialization of c# enum as string

我有两个课程如下:

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属性进行修饰。

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

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}]
}

这是我想要的,除了每个Item的“Category”枚举值被序列化为其整数值这一事实,而不是我在EnumMember属性中指定的值。我如何得到它,以便返回的JSON看起来像“类别”:“Category1”而不是“Category”:0?

1 个答案:

答案 0 :(得分:3)

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