Json.net全局设置

Lod*_*ijk 15 c# json.net

有没有办法为Json.net指定全局设置?

我们遇到的问题是它将所有DateTimes都置于UTC(正确地说是这样).出于传统目的,我们希望默认为本地时间.我不想在下面放置以下代码:

var settings = New JsonSerializerSettings();
settings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
JsonConvert.DeserializeObject(json, settings);
Run Code Online (Sandbox Code Playgroud)

Lod*_*ijk 25

所以,这被添加到Json.net 5.0 Release 5中

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    DateTimeZoneHandling = DateTimeZoneHandling.Local
};
Run Code Online (Sandbox Code Playgroud)


And*_*rei 8

是的,的确,您可以按照Lodewijk的说明设置默认的Json.Net设置。但是Web API使用它自己的设置,您必须分别设置它们。

Web API(.NET Core)

services.AddMvc(opts =>
{
    var jsonFormatter = (JsonOutputFormatter) opts.OutputFormatters
        .First(formatter => formatter is JsonOutputFormatter);
    jsonFormatter.PublicSerializerSettings.Converters.Add(new StringEnumConverter());
});
Run Code Online (Sandbox Code Playgroud)

Web API(.NET Framework)

var config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.Converters
    .Add(new StringEnumConverter());
Run Code Online (Sandbox Code Playgroud)

默认全局设置

此外,Json.NET现在还具有用于设置默认全局设置的API:

JsonConvert.DefaultSettings = () =>
{
    var settings = new JsonSerializerSettings();
    settings.Converters.Add(new StringEnumConverter());
    settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    return settings;
};
Run Code Online (Sandbox Code Playgroud)