zoukankan      html  css  js  c++  java
  • System.Test.Json 转换

    datetime空值转换

    • 创建转换器 DateTimeNullJsonConvert.cs
      /// <summary>
      /// datetime 空值转换
      /// </summary>
      public class DateTimeNullJsonConvert : JsonConverter<Nullable<DateTime>>
      {
          /// <summary>
          /// 读取
          /// </summary>
          /// <param name="reader"></param>
          /// <param name="typeToConvert"></param>
          /// <param name="options"></param>
          /// <returns></returns>
          public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
          {
              if (reader.TokenType == JsonTokenType.Null)
              {
                  return default;
              }
              if (reader.TokenType == JsonTokenType.String)
              {
                  if (DateTime.TryParse(reader.GetString(), out DateTime date))
                  {
                      return date;
                  }
                  return default;
              }
              return reader.GetDateTime();
          }
          /// <summary>
          /// 输出
          /// </summary>
          /// <param name="writer"></param>
          /// <param name="value"></param>
          /// <param name="options"></param>
          public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options)
          {
              writer.WriteStringValue(value == null ? "" : value.Value.ToString("yyyy-MM-dd HH:mm:ss"));
          }
      }
      
    • 在Setup.cs 配置文件AddJsonOptions中加入
      services.AddControllers().AddJsonOptions(opt =>
      {
          //修复日期空值返回异常
          opt.JsonSerializerOptions.Converters.Add(new DateTimeNullJsonConvert());
      })
      

    循环引用

    例如目录结构需要循环引用本身 而 System.Test.Json 不允许套嵌引用过多 可使用以下方案解决

    • 方案一
      • 使用Newtonsoft.JsonStartUp.cs中添加
      services.AddControllers().AddNewtonsoftJson();
      
    • 方案二
      • 如果当前项目必须使用System.Test.Json那就将需要进行循环引用的数据进行单独转换 单独使用Newtonsoft.Json
        例如
      public IActionResult Index(){
          var res = new NodeTree();
          var str = Newtonsoft.Json.JsonConvert.SerializeObject(res);
          return Json(str);
      }
      
  • 相关阅读:
    小程序注册
    Webpack
    npm总结1
    js事件
    js高级程序2
    js高级程序
    索引
    将数据渲染到页面的方法
    前后端分离后,通讯问题 springboot + vue
    axios post 请求后端参数为null解决方案
  • 原文地址:https://www.cnblogs.com/qs315/p/13569584.html
Copyright © 2011-2022 走看看