首页 文章

用JSON(C#)序列化枚举值[重复]

提问于
浏览
5

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

我有两个课程如下:

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 回答

  • 3

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

相关问题