【问题标题】:Serializing enum values in JSON (C#) [duplicate]在 JSON (C#) 中序列化枚举值 [重复]
【发布时间】:2011-12-18 20:51:47
【问题描述】:

可能重复:
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 看起来像 "Category": "Category1" 而不是 "Category": 0?

【问题讨论】:

    标签: c# json serialization


    【解决方案1】:

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

    【讨论】:

    • 不正确,使用 StringEnumConverter。如果您只希望它是单个实例中的字符串,请使用装饰器指定它,或者在序列化程序设置中包含转换器以将枚举全局转换为字符串,反之亦然
    • @wallacer @DeveloperX 实际上是正确的。 StringEnumConverter 是 Json.Net 属性,在基础 .Net 中不可用
    • @LukeMarlin 啊,好的。感谢您的澄清!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2012-05-26
    • 2023-04-05
    相关资源
    最近更新 更多