使用Newtonsoft.Json 转换DateTime类型时,若使用标准转换,则字符串内会有一个T(虽然再转换成DateTime没有问题)。
若要转换成DateTime没有T,可以加上特性:
public class TestClass
{
public TestClass()
{
Dt1 = Dt2 = new DateTime(, , , , , );
} [JsonConverter(typeof(TcDateTimeConverter))]
public DateTime Dt1 { get; set; } public DateTime Dt2 { get; set; }
} /// <summary>
/// DateTime Json序列化格式:yyyy-MM-dd HH:mm:ss
/// </summary>
public class TcFullDateTimeConverter : DateTimeConverterBase
{
private static IsoDateTimeConverter dtConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" }; public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return dtConverter.ReadJson(reader, objectType, ConvertHelper.ToDateTime(existingValue), serializer);
} public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
dtConverter.WriteJson(writer, ConvertHelper.ToDateTime(value), serializer);
}
} /// <summary>
/// DateTime Json序列化格式:yyyy-MM-dd HH:mm
/// </summary>
public class TcDateTimeConverter : DateTimeConverterBase
{
private static IsoDateTimeConverter dtConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm" }; public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return dtConverter.ReadJson(reader, objectType, ConvertHelper.ToDateTime(existingValue), serializer);
} public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
dtConverter.WriteJson(writer, ConvertHelper.ToDateTime(value), serializer);
}
} /// <summary>
/// DateTime Json序列化格式:yyyy-MM-dd
/// </summary>
public class TcDateConverter : DateTimeConverterBase
{
private static IsoDateTimeConverter dtConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd" }; public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return dtConverter.ReadJson(reader, objectType, ConvertHelper.ToDateTime(existingValue), serializer);
} public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
dtConverter.WriteJson(writer, ConvertHelper.ToDateTime(value), serializer);
}
} /// <summary>
/// DateTime Json序列化格式:HH:mm
/// </summary>
public class TcTimeConverter : DateTimeConverterBase
{
private static IsoDateTimeConverter dtConverter = new IsoDateTimeConverter { DateTimeFormat = "HH:mm" }; public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return dtConverter.ReadJson(reader, objectType, ConvertHelper.ToDateTime(existingValue), serializer);
} public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
dtConverter.WriteJson(writer, ConvertHelper.ToDateTime(value), serializer);
}
}
另外,若某字段如上加上TcDateTimeConverter,再转换为带TcDateTimeConverter特性或者不带该特性的标准DateTime,都没有问题。