.NET Core中WebAPI JSON返回值为null如何解决
public void ConfigureServices(IServiceCollection services)
{
//配置Mvc + json 序列化
services.AddMvc()
.AddNewtonsoftJson(options =>
{
//数据格式首字母小写 不使用驼峰 小驼峰firstName 大驼峰 FirstName
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
//使用默认方式,不更改元数据的key的大小写
//options.SerializerSettings.ContractResolver = new DefaultContractResolver();
// 忽略循环引用
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
// 设置时间格式
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
//忽略空值 不包含属性的null序列化
//options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
//忽略默认值和null 1、不包含属性默认值和null
//options.SerializerSettings.DefaultValueHandling = DefaultValueHandling.Igno
})
}
1、空值的处理
序列化和反序列化时需要忽略值为null的属性,设置SerializerSettings.NullValueHandling的值
-
NullValueHandling.Ignore 序列化和反序列化对象时忽略空值。
-
NullValueHandling.Include 序列化和反序列化对象时包含空值。
2、默认值的处理
序列化和反序列化时需要忽略默认值属性,设置SerializerSettings.DefaultValueHandling的值
-
DefaultValueHandling.Ignore 序列化和反序列化时忽略默认值
-
DefaultValueHandling.Include序列化和反序列化时包含默认值
public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddJsonOptions(options => { // 整齐打印 options.JsonSerializerOptions.WriteIndented = true; // 忽略值为Null的属性 options.JsonSerializerOptions.IgnoreNullValues = true; // 设置Json字符串支持的编码,默认情况下,序列化程序会转义所有非 ASCII 字符。 即,会将它们替换为 \uxxxx,其中 xxxx 为字符的 Unicode // 代码。 可以通过设置Encoder来让生成的josn字符串不转义指定的字符集而进行序列化 下面指定了基础拉丁字母和中日韩统一表意文字的基础Unicode 块 // (U+4E00-U+9FCC)。 基本涵盖了除使用西里尔字母以外所有西方国家的文字和亚洲中日韩越的文字 options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.CjkUnifiedIdeographs); // 反序列化不区分大小写 options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
//不使用驼峰命名,根据实体类型返回
options.JsonSerializerOptions.PropertyNamingPolicy = null; // 驼峰命名 options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; // 对字典的键进行驼峰命名 options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; // 序列化的时候忽略null值属性 options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; // 忽略只读属性,因为只读属性只能序列化而不能反序列化,所以在以json为储存数据的介质的时候,序列化只读属性意义不大 options.JsonSerializerOptions.IgnoreReadOnlyFields = true; // 不允许结尾有逗号的不标准json options.JsonSerializerOptions.AllowTrailingCommas = false; // 不允许有注释的不标准json options.JsonSerializerOptions.ReadCommentHandling = JsonCommentHandling.Disallow; // 允许在反序列化的时候原本应为数字的字符串(带引号的数字)转为数字 options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.AllowReadingFromString; // 处理循环引用类型,比如Book类里面有一个属性也是Book类 options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve; }); }