【问题标题】:JSON.NET deserialize custom date formatJSON.NET 反序列化自定义日期格式
【发布时间】:2016-01-13 16:14:00
【问题描述】:
我想以 UTC 类型将 "20160101000000000" 这样的日期反序列化为 DateTime。
var data = "20160101000000000";
var dateTime = JsonConvert.DeserializeObject<DateTime>(data,
new IsoDateTimeConverter { DateTimeFormat = "yyyyMMddhhmmssfff"});
【问题讨论】:
标签:
c#
.net
json
datetime
json.net
【解决方案1】:
尝试关注
var data = "20160101000000000";
var dateTime = new DateTime(JsonConvert.DeserializeObject<Int64>(data));
如果你想要UTC格式,请尝试以下
var utc = dateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");
或者实现自定义日期时间转换器
public class CustomDateTimeConverter : DateTimeConverterBase
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{ return; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return new DateTime(Convert.ToInt64(reader.Value));
}
}
并像这样使用
var data = "20160101000000000";
var dateTime = JsonConvert.DeserializeObject<DateTime>(data, new CustomDateTimeConverter());
【解决方案2】:
请记住,在 JSON 中,字符串必须被引用。因此,您在data 中得到的实际上是不是 JSON 字符串(它是一个数字)。如果您希望 JSON.NET 以您期望的方式解析它,您需要将其用引号括起来:
var data = "\"20160101000000000\"";