.jpg)
我有一个包含属性的类,在使用序列化对象时,我的 json 结果包含枚举的整数值而不是它的“名称”。有没有办法在我的 json 中获取枚举,而无需创建自定义?也许有一个属性可以用来装饰定义或对象属性?enumJavaScriptSerializerstringstringJavaScriptConverterenum
举个例子:
enum Gender { Male, Female }
class Person
{
int Age { get; set; }
Gender Gender { get; set; }
}
所需的 JSON 结果:
{ "Age": 35, "Gender": "Male" }
理想情况下,使用内置的 .NET 框架类寻找答案,如果不是可能的替代方案(如 Json.net),欢迎使用。

网友回答:
不,没有可以使用的特殊属性。 序列化为其数值,而不是其字符串表示形式。您需要使用自定义序列化来序列化其名称而不是数值。JavaScriptSerializerenumsenum
如果您可以使用 JSON.Net 而不是查看 Omer Bokhari 提供的有关此问题的答案:JSON.net 涵盖了此用例(通过属性)以及内置 .NET 序列化程序未处理的许多其他用例。这是一个比较序列化程序的特性和功能的链接。JavaScriptSerializer[JsonConverter(typeof(StringEnumConverter))]

网友回答:
我发现 Json.NET 提供了我正在寻找的带有属性的确切功能:StringEnumConverter
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
[JsonConverter(typeof(StringEnumConverter))]
public Gender Gender { get; set; }
有关更多详细信息,请参阅文档。StringEnumConverter
还有其他位置可以更全局地配置此转换器:
[JsonConverter(typeof(StringEnumConverter))]
enum Gender { Male, Female }
serializer.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
它将适用于它在序列化期间看到的每个枚举(由 Travis 建议)。
JsonConvert.SerializeObject(MyObject,
new Newtonsoft.Json.Converters.StringEnumConverter());
此外,您还可以通过使用 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());
模板简介:该模板名称为【在 json 中获取枚举,无需创建自定义?也许有一个属性可以用来装饰定义或对象属性?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。