2016-01-13 41 views
2

我想以UTC類型反序列化像這樣的"20160101000000000"DateTime的日期。JSON.NET反序列化自定義日期格式

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

enter image description here

回答

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'"); 

或實現自定義DateTime轉換

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\"";