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


    前言:
    就目前而言,.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;
    });
    

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

    微软官方文档地址:https://docs.microsoft.com/zh-cn/aspnet/core/web-api/advanced/formatting?view=aspnetcore-5.0

  • 相关阅读:
    Linux 常用工具openssh之ssh-add
    Linux 常用工具openssh之scp
    Linux 常用工具openssh之ssh
    Linux 常用工具sysstat之sar
    Shell常用命令之sort
    Docker存储驱动之Device Mapper简介
    ceph-deploy install时,远端节点在执行apt-get update命令时失败
    Ceph osd启动报错osd init failed (36) File name too long
    rdb map出错rbd sysfs write failed
    Docker存储驱动之OverlayFS简介
  • 原文地址:https://www.cnblogs.com/qingheshiguang/p/14296357.html
Copyright © 2020-2023  润新知