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

And*_*ler 5 c# serialization json

可能重复:
c#enum的JSON序列化为字符串

我有两个课程如下:

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

Item
    string Sku
    // ... snip ...
    ItemCategory Category
Run Code Online (Sandbox Code Playgroud)

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

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

    [EnumMember(Value = "Category2")]
    Category2
}
Run Code Online (Sandbox Code Playgroud)

我的两个类适当地使用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;
}
Run Code Online (Sandbox Code Playgroud)

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

{
    "OrderNumber":123,
    "Items":[{"SKU": "SKU1","Category": 0}]
}
Run Code Online (Sandbox Code Playgroud)

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

Dev*_*erX 5

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

  • @wallacer @DeveloperX 实际上是正确的。`StringEnumConverter` 是一个 Json.Net 属性,在基础 .Net 中不可用 (3认同)