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"
  };
}

Camel Case

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    
    
  services.AddMvc();
  // 或者以下写法
  // services.AddMvc().AddJsonOptions(options => options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver());
}

呼叫 Web API 会回传 JSON 如下:

{
    
    
  "id": 1,
  "firstName": "John",
  "lastName": "Wu",
  "email": null,
  "phoneNumber": null,
  "address": null
}

Pascal Case

Startup.cs

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

呼叫 Web API 会回传 JSON 如下:

{
    
    
  "Id": 1,
  "FirstName": "John",
  "LastName": "Wu",
  "Email": null,
  "PhoneNumber": null,
  "Address": null
}

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;
  });
}

呼叫 Web API 会回传 JSON 如下:

{
    
    
  "Id": 1,
  "FirstName": "John",
  "LastName": "Wu",
}

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; }
}

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

三、自定义转换方法 (以下是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;
            });

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;
        });

おすすめ

転載: blog.csdn.net/WuLex/article/details/116997143