WebApi 中使用AddNewtonsoftJson输出Json格式数据

1,067 阅读1分钟

前言: 就目前而言,.Net Core WebApi中输出格式几乎都是json,但是在core中使用任何服务都需要配置,这里需要配置 AddNewtonsoftJson

一、我们来看一个例子:

        [Route("details")]
        [HttpGet]
        public ActionResult<JObject> Details()
        {
            var data = new
            {
                Id=1,
                Name="Lucy",
                Address="珠穆朗玛峰",
                Time = DateTime.Now
            };
            return JObject.FromObject(data);

        }

不做任何配置,输出:

可以看出,并没有输出我们想要的数据。

处理方法:

我们需要在Startup类中添加AddNewtonsoftJson配置

 public void ConfigureServices(IServiceCollection services)
 {
    services.AddControllers()
            .AddNewtonsoftJson();
 }

结果输出:

得到正确的数据。

二、关于AddNewtonsoftJson

ASP.NET Core 3.0 之前的版本中,默认设置使用通过 Newtonsoft.Json 包实现的 JSON 格式化程序。 在 ASP.NET Core 3.0 或更高版本中,默认 JSON 格式化程序基于 System.Text.Json。

Newtonsoft.Json通过安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet 包并在中进行配置,可获得对基于的格式化程序和功能的支持 Startup.ConfigureServices 。

AddNewtonsoftJson方法具有重载功能,可以进行多项配置,以下是一些常用的配置

services.AddControllers()
        .AddNewtonsoftJson(options =>
          {
            //修改属性名称的序列化方式,首字母小写,即驼峰样式
            options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

            //日期类型默认格式化处理 方式1
            options.SerializerSettings.Converters.Add(new IsoDateTimeConverter(){DateTimeFormat = "yyyy/MM/dd HH:mm:ss"});
            //日期类型默认格式化处理 方式2
            options.SerializerSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat;
            options.SerializerSettings.DateFormatString = "yyyy/MM/dd HH:mm:ss";

            //忽略循环引用
            options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

            //解决命名不一致问题 
            options.SerializerSettings.ContractResolver = new DefaultContractResolver();
           
            //空值处理
            options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});

从例子中可以看出,配置后的时间格式已经被格式化了。

微软官方文档