赞
踩
用 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
}
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",
}
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、添加Startup
自定义转换代码。
2、重新运行查看结果。
需要先引用 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; });
Json
数据的统一格式最近做一个使用NETCORE 3.1 webapi的项目 ,在做接口数据返回的时候遇到了一些关于Json
格式的问题。
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;
});
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。