在JSON中序列化enum值(C#)

22 浏览
0 Comments

在JSON中序列化enum值(C#)

这个问题已经有答案了

可能有重复:

将c#枚举作为字符串进行JSON序列化

我有两个类如下:

Transaction
    int OrderNumber
    // ... snip ...
    IEnumerable 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看起来像“Category”:“Category1”,而不是“Category”:0?

admin 更改状态以发布 2023年5月25日
0
0 Comments

请参考 Stack Overflow 上的将枚举转化为字符串的JSON序列化
不,你不能使用特殊属性。JavaScriptSerializer将枚举序列化为它们的数字值而不是它们的字符串表示。你需要使用自定义序列化来将枚举序列化为它的名称而不是数值。

0