请选择 进入手机版 | 继续访问电脑版

马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

NetCore 统一处理 webapi 返回null 转为“”

[复制链接]
查看2256 | 回复0 | 2019-9-26 09:21:07 | 显示全部楼层 |阅读模式

数据库中部门表字段允许空值,则代码中实体类对应的字段类型为可空类型Nullable<>,如int?,DateTime?,null值字段序列化返回的值都为null,前端对应字段赋值必要做null值判断,随想到全局把null替换为""

网上找的方案都是重写了DefaultContractResolver,但是该方法只能办理string类型null→""的题目,对其他可空类型无效。

研究了下git 上Newtonsoft.Json和.netcore MVC的源码

终极利用自界说JsonOutputFormatter方式实现:

  1. public class MyJsonOutputFormatter : JsonOutputFormatter
  2. {
  3. public MyJsonOutputFormatter(JsonSerializerSettings serializerSettings) : base(serializerSettings, ArrayPool<char>.Shared)
  4. {
  5. }
  6. public new JsonSerializerSettings SerializerSettings => base.SerializerSettings;
  7. protected override JsonWriter CreateJsonWriter(TextWriter writer)
  8. {
  9. if (writer == null)
  10. {
  11. throw new ArgumentNullException(nameof(writer));
  12. }
  13. var jsonWriter = new NullJsonWriter(writer)
  14. {
  15. ArrayPool = new JsonArrayPool<char>(ArrayPool<char>.Shared),
  16. CloseOutput = false,
  17. AutoCompleteOnClose = false
  18. };
  19. return jsonWriter;
  20. }
  21. }
  22. public class NullJsonWriter : JsonTextWriter
  23. {
  24. public NullJsonWriter(TextWriter textWriter):base(textWriter)
  25. {
  26. }
  27. public override void WriteNull()
  28. {
  29. this.WriteValue(String.Empty);
  30. }
  31. }
复制代码

在 Startup 代码里面 修改

  1. //services.AddMvc().AddJsonOptions(option => {
  2. // //配置大小写题目,默认是首字母小写,该配置根据项目必要更改
  3. // //option.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
  4. // //配置序列化时时间格式为时间戳
  5. // //option.SerializerSettings.ContractResolver = new NullToEmptyStringResolver();
  6. // option.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
  7. //});
  8. services.AddMvc(config =>
  9. {
  10. var settings = new JsonSerializerSettings();
  11. //设置首字母小写,如果不必要 则改为 DefaultContractResolver
  12. settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
  13. //同一设置JsonResult中的日期格式
  14. settings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
  15. config.OutputFormatters.Insert(0, new MyJsonOutputFormatter(settings));
  16. });
复制代码






来源:https://www.cnblogs.com/rtwo/archive/2019/09/24/11578753.html
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则