【问题标题】: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\"";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-30
        • 1970-01-01
        • 2017-03-19
        • 2016-02-18
        • 1970-01-01
        • 2015-01-26
        相关资源
        最近更新 更多