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 }
另外,若某字段如上加上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”