Blame view

Yi.Abp.Net8/framework/Yi.Framework.Core/Json/DatetimeJsonConverter.cs 1.57 KB
515fceeb   “wangming”   框架初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  using System.Text.Json;
  using System.Text.Json.Serialization;
  
  namespace Yi.Framework.Core.Json;
  
  /// <summary>
  /// DateTime JSON序列化转换器
  /// </summary>
  public class DatetimeJsonConverter : JsonConverter<DateTime>
  {
      private readonly string _dateFormat;
  
      /// <summary>
      /// 初始化DateTime转换器
      /// </summary>
      /// <param name="format">日期格式化字符串,默认为yyyy-MM-dd HH:mm:ss</param>
      public DatetimeJsonConverter(string format = "yyyy-MM-dd HH:mm:ss")
      {
          _dateFormat = format;
      }
  
      /// <summary>
      /// JSON读取DateTime
      /// </summary>
      /// <param name="reader">JSON读取器</param>
      /// <param name="typeToConvert">目标类型</param>
      /// <param name="options">JSON序列化选项</param>
      /// <returns>DateTime</returns>
      public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
      {
          if (reader.TokenType == JsonTokenType.String)
          {
              return DateTime.TryParse(reader.GetString(), out DateTime dateTime) 
                  ? dateTime 
                  : reader.GetDateTime();
          }
          return reader.GetDateTime();
      }
  
      /// <summary>
      /// DateTime写入JSON
      /// </summary>
      /// <param name="writer">JSON写入器</param>
      /// <param name="value">DateTime</param>
      /// <param name="options">JSON序列化选项</param>
      public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
      {
          writer.WriteStringValue(value.ToString(_dateFormat));
      }
  }