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);
      }
      
  • 相关阅读:
    华为部分真机调试无法显示log问题解决
    Android Studio 配置模拟器AVD存放路径(默认在c盘,解决c盘空间不够问题)
    Android Studio Build APK没有报错,但是Generate signed apk报错
    安卓如何将TXT文件写到特定路径
    unity 显示、隐藏Android导航栏
    Unity 代码集锦之图片处理
    打开文件夹
    MVC总结
    unity 获取UGUI中的Text字的坐标
    Unity WWW类调用http
  • 原文地址:https://www.cnblogs.com/qs315/p/13569584.html
Copyright © 2011-2022 走看看