【问题标题】:Can't parse the data using JavaScriptDateTimeConverter无法使用 JavaScriptDateTimeConverter 解析数据
【发布时间】:2010-11-02 10:17:08
【问题描述】:

我尝试使用 Json.net 解析简单的 JSON

 string inputJson = @"
                {
                 ""modificationTime"" : ""\/Date(1224043200000)\/""
                 }";

并且定义了属性

[JsonProperty("modificationTime")]
[JsonConverter(typeof(JavaScriptDateTimeConverter))]
public DateTime ModificationTime { get; set; }

但是 DeserializeObject 抛出异常并显示以下消息: "解析日期时出现意外的令牌或值。令牌:日期,值:10/15/2008 04:00:00"

好吧,据我所知,它实际上已经解析了日期,不是吗? 这个异常是从 JavaScriptDateTimeConverter.cs 的第 68 行抛出的:

68 if (reader.TokenType != JsonToken.StartConstructor ||  string.Compare(reader.Value.ToString(), "Date", StringComparison.Ordinal) != 0)
69            throw new Exception("Unexpected token or value when parsing date. Token: {0}, Value: {1}".FormatWith(CultureInfo.InvariantCulture, reader.TokenType, reader.Value));
70    
71          reader.Read();

在这个地方 reader.TokenType 是 Date 并且 reader.Value.ToString() 是 10/15/2008 04:00:00。 有什么想法吗?

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    Json.NET 使用以下格式反序列化日期:

    "\/Date(1224043200000)\/"
    

    默认情况下。 JavaScriptDateTimeConverter 用于日期格式:

    new Date(1234567890)
    

    【讨论】:

      【解决方案2】:

      前段时间我也遇到过类似的问题。我找到了一种解决方法并在博客中介绍了它:

      http://shico.blogspot.com/2010/07/ajaxpro-deserialize-json-datetime.html

      希望对你有帮助。

      【讨论】:

      • 不,它没有。他写道,如果它是“/Date(1224043200000)/”,那么它将不起作用。当我使用“”\/Date(1224043200000)\/“”时。我想问题是 reader.TokenType 应该是 JsonToken.StartConstructor。它可能意味着 "\/ 像这个令牌一样被解析。
      猜你喜欢
      • 1970-01-01
      • 2019-04-13
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多