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" }
不,没有可以使用的特殊属性。 JavaScriptSerializer
将enums
序列化为它们的数值而不是它们的字符串表示。 您需要使用自定义序列化来将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