我有一个包含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" }
我发现Json.NET使用StringEnumConverter
属性提供了我正在寻找的确切功能:
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
[JsonConverter(typeof(StringEnumConverter))]
public Gender Gender { get; set; }
有关StringEnumConverter
文档的更多详细信息。
没有你可以使用的特殊属性。 JavaScriptSerializer
将enums
序列化为其数值而不是其字符串表示形式。您需要使用自定义序列化将enum
序列化为其名称而不是数值。
编辑:正如 @OmerBakhari 所指出的那样,JSON.net 涵盖了这个用例(通过属性[JsonConverter(typeof(StringEnumConverter))]
)以及许多其他内部. net 序列化程序无法处理的用例。 这是一个比较序列化器的特性和功能的链接 。
将以下内容添加到您的 global.asax 中,以便将 c#enum 的 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());