当前位置:   article > 正文

ASP.NET Core 教学 - Web API JSON 序列化设定

ASP.NET Core 教学 - Web API JSON 序列化设定

在这里插入图片描述
用 JSON 作为 Web API 资料传递格式,并使用 camelCase 作为名称命名规则,几乎已成为通用的标准。ASP.NET Core Web API 也很贴心的把回传物件格式预设为 JSON camelCase

通常 C# 端定义的物件栏位都是 PascalCase,但有时候为了让前端 JavaScript 物件可以跟后端保持一致,也会把前端 JavaScript 物件栏位定义成 PascalCase 格式。

为了让前后端定义的物件栏位格式保持一致,就可以透过 SerializerSettings 改变收送格式。

Define Web API

假设我们有一个 Web API 回传 ContactModel 物件如下:

public class ContactModel
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public string Address { get; set; }
}

[HttpGet]
public ContactModel Get()
{
  return new ContactModel
  {
    Id = 1,
    FirstName = "John",
    LastName = "Wu"
  };
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

Camel Case

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
  services.AddMvc();
  // 或者以下写法
  // services.AddMvc().AddJsonOptions(options => options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver());
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

呼叫 Web API 会回传 JSON 如下:

{
  "id": 1,
  "firstName": "John",
  "lastName": "Wu",
  "email": null,
  "phoneNumber": null,
  "address": null
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Pascal Case

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
  services.AddMvc().AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
}
  • 1
  • 2
  • 3
  • 4

呼叫 Web API 会回传 JSON 如下:

{
  "Id": 1,
  "FirstName": "John",
  "LastName": "Wu",
  "Email": null,
  "PhoneNumber": null,
  "Address": null
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Ignore Null

上述两个 JSON 回传,都带有 null 的栏位。在转型的过程,找不到栏位会自动转成 null,传送的过程忽略掉也没差,反而可以节省到一点流量。

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
  services.AddMvc().AddJsonOptions(options =>
  {
    options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
  });
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

呼叫 Web API 会回传 JSON 如下:

{
  "Id": 1,
  "FirstName": "John",
  "LastName": "Wu",
}
  • 1
  • 2
  • 3
  • 4
  • 5

NetCore偶尔有用篇:NetCore项目WebApi返回Json属性大小写,含NetCore2.0 NetCore3.0

一、概述

1、前面文章介绍Controller的大小写问题时,目的只是介绍它的差异性,有同学回复了,这里把它作为一个点写一下吧。

二、默认定义的转换结果

1、写一个返回对象的方法。

2、运行查看结果。

public class OneController : Controller
{
    public Model GetString(string id)
    {
        return new Model() { ID = id, Name = "aa" };
    }
}

public class Model
{
    public string ID { get; set; }
    public string Name { get; set; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

运行结果
在这里插入图片描述

三、自定义转换方法 (以下是NetCore 2.0的写法)

1、添加Startup自定义转换代码。

2、重新运行查看结果。
在这里插入图片描述
在这里插入图片描述

四、自定义转换方法 (以下是NetCore 3.0的写法)

需要先引用 Microsoft.AspNetCore.Mvc.NewtonsoftJson

 services.AddMvc().AddNewtonsoftJson(options =>
            {
                // 忽略循环引用
                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                // 不使用驼峰
                options.SerializerSettings.ContractResolver = new DefaultContractResolver();
                // 设置时间格式
                options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
                // 如字段为null值,该字段不会返回到前端
                // options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
            });
            //或
            services.AddControllers().AddNewtonsoftJson(options =>
            {
                // 忽略循环引用
                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                // 不使用驼峰
                options.SerializerSettings.ContractResolver = new DefaultContractResolver();
                // 设置时间格式
                options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
                // 如字段为null值,该字段不会返回到前端
                // options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
            });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

NetCore WebApi 返回Json数据的统一格式

概述

最近做一个使用NETCORE 3.1 webapi的项目 ,在做接口数据返回的时候遇到了一些关于Json格式的问题。

NETCORE 3.1 统一设置返回的JSON格式

services.AddControllers(options => options.ReturnHttpNotAcceptable = true)
        .AddNewtonsoftJson(options =>
        {
            //设置时间格式
            options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
            //忽略循环应用
            options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            //返回的数据是否使用驼峰
            options.SerializerSettings.ContractResolver = new DefaultContractResolver();
            //如果字段为null,该字段会依然返回到Json串中。如:“name”:null
            options.SerializerSettings.NullValueHandling = NullValueHandling.Include;
        });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/550358
推荐阅读
相关标签
  

闽ICP备14008679号