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

时间:2016-01-13 16:14:00

标签: c# .net json datetime json.net

我希望以UTC格式将"20160101000000000"的日期反序列化为DateTime

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

enter image description here

2 个答案:

答案 0 :(得分: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 :(得分:1)

请记住,在JSON中,必须引用字符串。因此,您在data中获得的实际上是一个JSON字符串(它是一个数字)。如果您希望JSON.NET以您期望的方式解析它,您需要将其包装在引号中:

var data = "\"20160101000000000\"";