如何将 Web API 的序列化配置为使用camelCase
(从小写字母开始)属性名称,而不是像在 C# 中那样PascalCase
。
我可以在整个项目中全局执行此操作吗?
如果要更改Newtonsoft.Json(又名 JSON.NET)中的序列化行为,则需要创建设置:
var jsonSerializer = JsonSerializer.Create(new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
NullValueHandling = NullValueHandling.Ignore // ignore null values
});
您还可以将这些设置传递到JsonConvert.SerializeObject
:
JsonConvert.SerializeObject(objectToSerialize, serializerSettings);
对于 ASP.NET MVC 和 Web API。在 Global.asax 中:
protected void Application_Start()
{
GlobalConfiguration.Configuration
.Formatters
.JsonFormatter
.SerializerSettings
.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
排除空值:
GlobalConfiguration.Configuration
.Formatters
.JsonFormatter
.SerializerSettings
.NullValueHandling = NullValueHandling.Ignore;
指示生成的 JSON 中不应包含空值。
ASP.NET 核心
默认情况下,ASP.NET 核心以驼峰大小写格式序列化值。
对于 MVC 6.0.0-rc1-final
编辑启动.cs,在ConfigureServices(IserviceCollection)
中,修改services.AddMvc();
services.AddMvc(options =>
{
var formatter = new JsonOutputFormatter
{
SerializerSettings = {ContractResolver = new CamelCasePropertyNamesContractResolver()}
};
options.OutputFormatters.Insert(0, formatter);
});
ASP.NET CORE 1.0.0 Json 序列化具有默认的 camelCase。裁判此公告
在较新的 (vNext) C# 6.0 中执行此操作,则必须在位于 Startup.cs
类文件中的 ConfigureServices
方法中通过MvcOptions
进行配置。
services.AddMvc().Configure<MvcOptions>(options =>
{
var jsonOutputFormatter = new JsonOutputFormatter();
jsonOutputFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
jsonOutputFormatter.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Ignore;
options.OutputFormatters.Insert(0, jsonOutputFormatter);
});
正如其他人指出的那样,驼峰是默认的。但是,如果您不希望到处都这样做,则可以像这样注释您的类。
using System.Text.Json.Serialization;
public class Developer
{
[JsonPropertyName("Id")]
public int Id { get; set; }
[JsonPropertyName("FirstName")]
public string? FirstName { get; set; }
[JsonPropertyName("LastName")]
public string? LastName { get; set; }
[JsonPropertyName("RowNum")]
public int RowNum { get; set; }
[JsonPropertyName("StartDate")]
public DateTime StartDate { get; set; }
}