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.Json
在StartUp.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); }
- 如果當前項目必須使用