简体   繁体   中英

JSON.NET deserialize custom date format

I want to deserialize date like this "20160101000000000" to DateTime in UTC kind.

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

在此处输入图片说明

Try following

var data = "20160101000000000";
var dateTime = new DateTime(JsonConvert.DeserializeObject<Int64>(data));

If you want to UTC format, try following

var utc = dateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");

Or implement Custom Datetime Converter

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

}

And use like this

var data = "20160101000000000";
var dateTime = JsonConvert.DeserializeObject<DateTime>(data, new CustomDateTimeConverter());

Remember that in JSON, strings must be quoted. Therefore what you've got in data is actually not a JSON string (it's a number). If you want JSON.NET to parse this the way you expect, you'll need to wrap it in quotes:

var data = "\"20160101000000000\"";

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM