JSON序列化为字符串的枚举

我有一个包含enum属性的类,在使用JavaScriptSerializer序列化对象时,我的json结果包含枚举的整数值而不是其string “name”。 有没有办法让我的json中的string枚举而不必创建自定义的JavaScriptConverter ? 也许有一个属性,我可以装饰enum定义,或对象属性,用?

举个例子:

enum Gender { Male, Female }

class Person
{
    int Age { get; set; }
    Gender Gender { get; set; }
}

期望的json结果:

{ "Age": 35, "Gender": "Male" }

不,没有可以使用的特殊属性。 JavaScriptSerializerenums序列化为它们的数值而不是它们的字符串表示。 您需要使用自定义序列化来将enum序列化为名称而不是数值。

编辑:正如@OmerBakhari所指出的,JSON.net涵盖了这个用例(通过属性[JsonConverter(typeof(StringEnumConverter))]和其他许多未由内置的.net序列化器处理的内容。 这是一个比较序列化器的特性和功能的链接。


我发现Json.NET通过StringEnumConverter属性提供了我正在寻找的确切功能:

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

[JsonConverter(typeof(StringEnumConverter))]
public Gender Gender { get; set; }

有关StringEnumConverter文档的更多详细信息。


将以下代码添加到您的global.asax中,作为字符串的C#枚举的JSON序列化

  HttpConfiguration config = GlobalConfiguration.Configuration;
            config.Formatters.JsonFormatter.SerializerSettings.Formatting =
                Newtonsoft.Json.Formatting.Indented;

            config.Formatters.JsonFormatter.SerializerSettings.Converters.Add
                (new Newtonsoft.Json.Converters.StringEnumConverter());
链接地址: http://www.djcxy.com/p/8399.html

上一篇: JSON serialization of enum as string

下一篇: Why is the slash an escapable character in JSON?