【问题标题】:json.net JsonConvert.DeserializeObjectAsync ISO 8601 Datejson.net JsonConvert.DeserializeObjectAsync ISO 8601 日期
【发布时间】:2013-02-03 14:17:24
【问题描述】:

编辑 2:

我创建了一个 Windows phone 8 应用程序并包含 Microsoft.WindowsAzure.MobileServices;使用与原始问题中下面的违规代码相同的类,我创建了一条 json.net DID 成功反序列化的记录。

 [{"id":1,"DataLoggerName":"Ben Walkin","Time":"2013-02-19T18:39:51.733Z",
[{"id":1,"DataLoggerName":"JHANetDuino","Time":"2013-02-19T16:46:55.205K",

重新阅读ISO 8601 Wikipedia article 我现在将“K”解释为罪魁祸首。只有“Z”祖鲁时间是可以接受的。偏移量用数字表示。 "ISO 8601 中的时区表示为本地时间(未指定位置)、UTC 或与 UTC 的偏移量。"

我将尝试为客户端发布一个解决方案,该解决方案使用不受支持的 .dll 发布“K”.netmf,以允许在 Azure 中创建表数据。

编辑 1:

我在我的解决方案中包含了 json.net 以逐步解决错误并发现:

Newtonsoft.Json.JsonReaderException 未被用户代码处理
HResult=-2146233088 消息=无法将字符串转换为日期时间: 2013-02-18T06:35:25.604K。路径“[0].Time”,第 1 行,位置 74。

原始问题

我有一个 Windows 商店应用程序,它使用我用 .php 构建的 Json 数据。我最近一直在增强它以与 Windows Azure 一起使用。我“拥有”代码并且可以更正它以对其他人有用并遵循“标准”为此我正在尝试标准化我的 Json,特别是 DateTime(让我感到困惑)

这是一个有效的 ISO 8601 日期吗? “时间”:“2013-02-18T06:35:25.604K” 这不是有效的 ISO 8601 日期吗? “时间”:“2013-02-11 16:25:54”

有效日期在数据和时间之间有'T',无效有''?

来自旧工作 .php 代码的数据

    [{"Time":"2013-02-11 16:25:54","Temperature0":"74.38478","Temperature1":"57.142857142857146"},{"Time":"2013-02-11 16:26:54","Temperature0":"74.38478","Temperature1":"57.753357753357754"},

来自新 Azure 崩溃代码的数据

    [{"id":1,"DataLoggerName":"JHA NetDuino","Time":"2013-02-18T06:35:25.604K","Temperature0":82.78388278388276,"Temperature1":0},

这是读取在我看来无效的 json ISO 8601 日期数据的旧工作代码,因为日期和时间之间没有“T”。

                var strJson = await GetJsonHistoricalTemperatureData.GetHistoricalTemperatureData();
        return await JsonConvert.DeserializeObjectAsync<ObservableCollection<HistoricalTemperatureData>>(strJson);


        public class HistoricalTemperatureData
{
    public int Id { get; set; }
    public string DataLoggerName { get; set; }
    public DateTime Time { get; set; }
    public double Temperature0 { get; set; }
    public double Temperature1 { get; set; }
}

如果我使用相同的代码读取 Azure 数据,我会在 json.net 上收到异常错误

    A first chance exception of type 'Newtonsoft.Json.JsonReaderException' occurred in mscorlib.dll

从我读过的所有内容来看,该应用似乎不应该使用原始日期数据,而应该使用新的 Azure 数据。按照 ISO 8601 格式,Azure 数据似乎更正确。我想对齐我的旧 .php 代码来生成这个(很容易完成)并修复 Windows 商店应用程序以正确反序列化 Json。

【问题讨论】:

    标签: azure json.net


    【解决方案1】:

    重新阅读ISO 8601 Wikipedia 文章我现在将“K”解释为罪魁祸首。只有“Z”祖鲁时间是可以接受的。偏移量用数字表示。 “ISO 8601 中的时区表示为本地时间(未指定位置)、UTC 或与 UTC 的偏移量。”

    【讨论】:

      猜你喜欢
      • 2013-05-14
      • 2017-08-06
      • 1970-01-01
      • 2010-10-23
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多