Newtonsoft.Json 转换DateTime类型为字符串时,串内部会有一个T。解决方案

Posted nlh774

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Newtonsoft.Json 转换DateTime类型为字符串时,串内部会有一个T。解决方案相关的知识,希望对你有一定的参考价值。

使用Newtonsoft.Json 转换DateTime类型时,若使用标准转换,则字符串内会有一个T(虽然再转换成DateTime没有问题)。

若要转换成DateTime没有T,可以加上特性:

 1 public class TestClass 
 2     {
 3         public TestClass()
 4         {
 5             Dt1 = Dt2 = new DateTime(1900, 1, 1, 0, 0, 0);
 6         }
 7 
 8         [JsonConverter(typeof(TcDateTimeConverter))]
 9         public DateTime Dt1 { get; set; }
10 
11         public DateTime Dt2 { get; set; }
12     }
13 
14 
15 
16  /// <summary>
17     /// DateTime Json序列化格式:yyyy-MM-dd HH:mm:ss
18     /// </summary>
19     public class TcFullDateTimeConverter : DateTimeConverterBase
20     {
21         private static IsoDateTimeConverter dtConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
22 
23         public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
24         {
25             return dtConverter.ReadJson(reader, objectType, ConvertHelper.ToDateTime(existingValue), serializer);
26         }
27 
28         public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
29         {
30             dtConverter.WriteJson(writer, ConvertHelper.ToDateTime(value), serializer);
31         }
32     }
33 
34     /// <summary>
35     /// DateTime Json序列化格式:yyyy-MM-dd HH:mm
36     /// </summary>
37     public class TcDateTimeConverter : DateTimeConverterBase
38     {
39         private static IsoDateTimeConverter dtConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm" };
40 
41         public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
42         {
43             return dtConverter.ReadJson(reader, objectType, ConvertHelper.ToDateTime(existingValue), serializer);
44         }
45 
46         public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
47         {
48             dtConverter.WriteJson(writer, ConvertHelper.ToDateTime(value), serializer);
49         }
50     }
51 
52     /// <summary>
53     /// DateTime Json序列化格式:yyyy-MM-dd
54     /// </summary>
55     public class TcDateConverter : DateTimeConverterBase
56     {
57         private static IsoDateTimeConverter dtConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd" };
58 
59         public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
60         {
61             return dtConverter.ReadJson(reader, objectType, ConvertHelper.ToDateTime(existingValue), serializer);
62         }
63 
64         public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
65         {
66             dtConverter.WriteJson(writer, ConvertHelper.ToDateTime(value), serializer);
67         }
68     }
69 
70     /// <summary>
71     /// DateTime Json序列化格式:HH:mm
72     /// </summary>
73     public class TcTimeConverter : DateTimeConverterBase
74     {
75         private static IsoDateTimeConverter dtConverter = new IsoDateTimeConverter { DateTimeFormat = "HH:mm" };
76 
77         public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
78         {
79             return dtConverter.ReadJson(reader, objectType, ConvertHelper.ToDateTime(existingValue), serializer);
80         }
81 
82         public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
83         {
84             dtConverter.WriteJson(writer, ConvertHelper.ToDateTime(value), serializer);
85         }
86     }
View Code

另外,若某字段如上加上TcDateTimeConverter,再转换为带TcDateTimeConverter特性或者不带该特性的标准DateTime,都没有问题。

 

以上是关于Newtonsoft.Json 转换DateTime类型为字符串时,串内部会有一个T。解决方案的主要内容,如果未能解决你的问题,请参考以下文章

比Newtonsoft.Json轻量快速简洁的实体JSON转换库YeaJur.Mapper

Newtonsoft.Json把含有集合的对象转换成json

在 C# 中将字符串转换为 json 格式。 Newtonsoft.json 显示黄色标记

如何”Newtonsoft.Json.Linq.JValue”的对象强制转换为类型“Newtonsoft.Json.Linq.JArray"?

无法将“Newtonsoft.Json.Linq.JObject”类型的对象强制转换为“Newtonsoft.Json.Linq.JArray”

Newtonsoft.Json在转换指定时间格式时默认是UTC时间