JSON.NET反序列化自定义日期格式

3

我希望能将形如"20160101000000000"的日期反序列化为UTC时间的DateTime类型。

var data = "20160101000000000";
var dateTime = JsonConvert.DeserializeObject<DateTime>(data,
            new IsoDateTimeConverter { DateTimeFormat = "yyyyMMddhhmmssfff"});

enter image description here

2个回答

3

请尝试以下操作:

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());

1
请记住,在JSON中,字符串必须用引号括起来。因此,您在data中得到的实际上不是JSON字符串(它是一个数字)。如果您希望JSON.NET按照您的预期解析它,则需要将其用引号括起来:
var data = "\"20160101000000000\"";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接