net核心中WebAPI JSON返回值为null如何解决

  介绍

本篇文章给大家分享的是有关。网络核心中WebAPI JSON返回值为null如何解决,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。


,,,,,net核心中使用Newtonsoft.Json进行序列化,WebAPI接口返回格式通过Startup.cs类全局设置。想是否可以通过配置把空替换为空值?于是找到了Newtonsoft。Json在序列化和反序列化期间如何处理空值和默认值的属性,具体配置代码如下:

public  void  ConfigureServices (IServiceCollection 服务)   {   ,//配置Mvc  +, json 序列化   ,services.AddMvc ()   .AddNewtonsoftJson才能(options =比;   {才能   ,,//数据格式首字母小写,不使用驼峰,小驼峰firstName 大驼峰,FirstName   ,,options.SerializerSettings.ContractResolver =, new  CamelCasePropertyNamesContractResolver ();   ,,//使用默认方式,不更改元数据的关键的大小写   ,,//options.SerializerSettings.ContractResolver =, new  DefaultContractResolver ();   ,,//,忽略循环引用   ,,options.SerializerSettings.ReferenceLoopHandling =, ReferenceLoopHandling.Ignore;//,,,设置时间格式   ,,options.SerializerSettings.DateFormatString =,“yyyy-MM-dd  HH: mm: ss";   ,,//忽略空值,不包含属性的零序列化   ,,//options.SerializerSettings.NullValueHandling =, NullValueHandling.Ignore;   ,,//忽略默认值和null  1,不包含属性默认值和null   ,,//options.SerializerSettings.DefaultValueHandling =DefaultValueHandling.Igno   })才能   }

, 1,空值的处理

,,,,,序列化和反序列化时需要忽略值为零的属性,设置SerializerSettings。NullValueHandling的值

<李>

, NullValueHandling。忽略序列化和反序列化对象时忽略空值。

<李>

, NullValueHandling。包括序列化和反序列化对象时包含空值。

2,默认值的处理

,,,,,序列化和反序列化时需要忽略默认值属性,设置SerializerSettings。DefaultValueHandling的值

<李>

DefaultValueHandling。忽略序列化和反序列化时忽略默认值

<李>

DefaultValueHandling。包括序列化和反序列化时包含默认值

3,示例代码

/*包含属性的默认值与零序列化*/{   ,“Name":空,   ,“Age": 0,   ,“Partner":空,   ,“Salary": 0.0   }/*不包含属性的默认值序列化*/{   ,“Name":“Hello  World"   ,“Age": 28   }/*不包含属性的零序列化*/{   ,“Name":“Hello  World"   ,“Age": 28日,   ,“Salary": 0.0   }

通过上面的分析:一种是不包含属性的默认值序列化,另一种是不包含属性的零序列化,都不能满足目前的需求接口统一返回的零序列化为空。

二,解决问题

1项目WebAPI默认返回的JSON结果格式如下:

{   ,“code": 0,   ,“msg":“查询成功“,   ,“data": {   “id"才能:,1,   “title"才能:,“炎炎夏日暖暖肚“,   “describe"才能:,““,   “author"才能:,空,   “authorId"才能:,空,   “linkSource"才能:,空,   “author_Picture"才能:,空,   “content"才能:,“炎炎夏日,很多人喜欢吃些寒凉的食物解暑,可这种做法非常伤身!”,   ,}   }

2,需要解决的问题把所有的零替换为空,具体如下图所示:

。网络核心中WebAPI JSON返回值为null如何解决”>,,,,,,,</p> <h4> 3,解决方案</h4> <p>,,,,,需要自己写一个NullToEmptyStringResolver类,然后重写CamelCasePropertyNamesContractResolver,但是该方法只能解决字符串类型零→““的问题,对其他可空类型无效,比如:int ? DateTime吗?等。<br/> </p> <pre类= public  class  NullToEmptyStringResolver : CamelCasePropertyNamesContractResolver   {///才能,& lt; summary>///,才能创建属性///才能,& lt;/summary>///才能,& lt; param  name=皌ype"祝辞类型& lt;/param>///才能,& lt; param  name=癿emberSerialization"在序列化成员& lt;/param>///才能,& lt; returns> & lt;/returns>   protected 才能override  IList< JsonProperty>, CreateProperties(类型、Type  MemberSerialization  memberSerialization)   {才能   ,,,return  type.GetProperties () .Select (c =比;   ,,,,,,,{   ,,,,,,,,,var  jsonProperty =, base.CreateProperty (c, memberSerialization);   ,,,,,,,,,jsonProperty.ValueProvider =, new  NullToEmptyStringValueProvider (c);   ,,,,,,,,,return  jsonProperty;   ,,,,,,,}).ToList ();   ,,}   }      public  class  NullToEmptyStringValueProvider : IValueProvider   {   private 才能readonly  PropertyInfo  _memberInfo;///才能,& lt; summary>///,才能构造函数   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

net核心中WebAPI JSON返回值为null如何解决