System.Text.Json
(default)
startup
配置代码如下:
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;
public void ConfigureServices(IServiceCollection services)
{
services.AddJsonOptions(options =>
{
//格式化日期时间格式
options.JsonSerializerOptions.Converters.Add(new DatetimeJsonConverter());
//数据格式首字母小写
//options.JsonSerializerOptions.PropertyNamingPolicy =JsonNamingPolicy.CamelCase;
//数据格式原样输出
options.JsonSerializerOptions.PropertyNamingPolicy = null;
//取消Unicode编码
options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
//忽略空值
options.JsonSerializerOptions.IgnoreNullValues = true;
//允许额外符号
options.JsonSerializerOptions.AllowTrailingCommas = true;
//反序列化过程中属性名称是否使用不区分大小写的比较
options.JsonSerializerOptions.PropertyNameCaseInsensitive = false;
});
}
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
public class DatetimeJsonConverter : JsonConverter<DateTime>
{
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.String)
{
if (DateTime.TryParse(reader.GetString(), out DateTime date))
return date;
}
return reader.GetDateTime();
}
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss"));
}
}
Newtonsoft.Json
Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson -Version 3.1.0
startup
配置代码如下:
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
public void ConfigureServices(IServiceCollection services)
{
services.AddNewtonsoftJson(options =>
{
//设置时间格式
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
//忽略循环引用
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
//数据格式首字母小写
//options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
//数据格式按原样输出
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
//忽略空值
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
}
.Net Core3.0 WebApi 项目框架搭建 十四:自定义返回Json
大小写格式
默认格式
在.net core 3中,默认的json返回格式为驼峰命名法
有的时候,我们希望返回的全小写或者全大写等。当然微软爸爸已经提供了拓展的接口。
设置返回Json
名称全小写
新建JsonConv
文件夹,新建LowercasePolicy.cs
,继JsonNamingPolicy
/// <summary>
/// 返回对象全小写
/// </summary>
public class LowercasePolicy : JsonNamingPolicy
{
public override string ConvertName(string name) =>
name.ToLower();
}
startup.cs
的ConfigureServices
方法新加AddJsonOptions
services.AddControllers(option =>
{
option.Filters.Add(typeof(GlobalExceptionsFilter));
}).AddJsonOptions(option =>
{
//空的字段不返回
option.JsonSerializerOptions.IgnoreNullValues = true;
//返回json小写
option.JsonSerializerOptions.PropertyNamingPolicy = new LowercasePolicy();
});
继续测试刚才的方法,发现已经转为小写了
格式化时间
JsonConv
文件夹新建DateTimeConverter
和DateTimeNullableConverter
public class DateTimeConverter : JsonConverter<DateTime>
{
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return DateTime.Parse(reader.GetString());
}
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss"));
}
}
public class DateTimeNullableConverter : JsonConverter<DateTime?>
{
public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return string.IsNullOrEmpty(reader.GetString()) ? default(DateTime?) : DateTime.Parse(reader.GetString());
}
public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options)
{
writer.WriteStringValue(value?.ToString("yyyy-MM-dd HH:mm:ss"));
}
}
AddJsonOptions
添加进去
//时间格式格式化
option.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
option.JsonSerializerOptions.Converters.Add(new DateTimeNullableConverter());
这样,如果我们的实体是Datetime
类型那么最后输出的就是yyyy-MM-dd HH:mm:ss
这种格式