Leo*_*Leo 83 .net c# json json.net
我希望使用json.net将枚举反序列化为其字符串表示形式,反之亦然.我可以想出告诉框架应用它的唯一方法StringEnumConverter是注释有问题的属性,如下所示:
[JsonConverter(typeof(StringEnumConverter))]
public virtual MyEnums MyEnum { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是,在我的用例中,全局配置json.net会更方便,所有枚举都使用它进行序列化StringEnumConverter,而不需要额外的注释.
有没有办法这样做,例如在自定义的帮助下JsonSerializerSettings?
Jam*_*ing 111
添加StringEnumConverter到JsonSerializerSettings转换器集合.
如果您希望序列化程序使用camelCasing,您也可以设置它:
SerializerSettings.Converters.Add(
new StringEnumConverter { CamelCaseText = true });
Run Code Online (Sandbox Code Playgroud)
这将序列化SomeValue到someValue.
Gaz*_*Gaz 38
其他答案适用于ASP.NET,但如果您想在任何上下文中调用JsonConvert来设置这些设置,您可以执行以下操作:
JsonConvert.DefaultSettings = (() =>
{
var settings = new JsonSerializerSettings();
settings.Converters.Add(new StringEnumConverter {CamelCaseText = true});
return settings;
});
Run Code Online (Sandbox Code Playgroud)
Igg*_*ggy 18
在你的Global.asax.cs中添加
HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add
(new Newtonsoft.Json.Converters.StringEnumConverter());
Run Code Online (Sandbox Code Playgroud)
For ASP.NET Core 2 do the following:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.Converters.Add(new StringEnumConverter());
});
...
Run Code Online (Sandbox Code Playgroud)
Please note this is not services.AddJsonOptions(...), it must be tagged onto MVC because you're creating settings for MVC.
从版本 12.0.1 开始,以前的答案已过时。新方法是使用 NamingStrategy。https://www.newtonsoft.com/json/help/html/NamingStrategyCamelCase.htm
serializerSettings.Converters.Add(
new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy() }
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35930 次 |
| 最近记录: |