协慌网

登录 贡献 社区

.NET - 枚举的 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" }

答案

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

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

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

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

没有你可以使用的特殊属性。 JavaScriptSerializerenums序列化为其数值而不是其字符串表示形式。您需要使用自定义序列化将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());