Json.net 全局设置
本文关键字:全局设置 net Json | 更新日期: 2023-09-27 18:01:04
有没有办法为 Json.net 指定全局设置?
我们遇到的问题是它将所有日期时间都放在UTC中(这是正确的(。出于旧版目的,我们希望默认为本地时间。我不想把下面的代码放在任何地方:
var settings = New JsonSerializerSettings();
settings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
JsonConvert.DeserializeObject(json, settings);
因此,这被添加到 Json.net 5.0 Release 5
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Local
};
从发行说明:
在应用程序中使用
JsonConvert.DefaultSettings
设置一次,默认设置将被所有调用JsonConvert.SerializeObject
/DeserializeObject
和JToken.ToObject
/FromObject
自动使用。用户为这些调用提供的任何设置都将覆盖默认设置。因为在某些情况下不应该自定义 JSON,例如 Facebook 或 Twitter 库,默认情况下
JsonSerializer
不会使用DefaultSettings
,为这些框架或应用程序中不应使用默认设置的位置提供选择退出。要创建使用它们的JsonSerializer
,有一种新的JsonSerializer.CreateDefault()
方法。
请注意,当 ASP.NET 直接调用 Newtonsoft 时,例如在模型绑定或响应格式中,它会选择不使用这些全局默认设置。 要配置 ASP.NET 内部使用的默认值,请参阅 Andrei 的此答案。
是的,确实您可以按照 Lodewijk 的解释设置默认 Json.Net 设置。但 Web API 使用自己的设置,您必须单独设置它们。
Web API(.NET Core 3.x 及更高版本(
在这些版本中,默认情况下不使用 Json.NET。 若要使用它,请引用 Microsoft.AspNetCore.Mvc.NewtonsoftJson
NuGet 包并执行以下操作:
services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.Converters.Add(nnew StringEnumConverter());
});
Web API(.NET Core 1.x 和 2.x(
services.AddMvc(opts =>
{
var jsonFormatter = (JsonOutputFormatter) opts.OutputFormatters
.First(formatter => formatter is JsonOutputFormatter);
jsonFormatter.PublicSerializerSettings.Converters.Add(new StringEnumConverter());
});
Web API (.NET Framework(
var config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.Converters
.Add(new StringEnumConverter());
默认全局设置
此外,Json.NET 现在有一个 API 来设置默认全局设置:
JsonConvert.DefaultSettings = () =>
{
var settings = new JsonSerializerSettings();
settings.Converters.Add(new StringEnumConverter());
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
return settings;
};