json.net JsonConvert.DeserializeObjectAsync ISO 8601日期

时间:2013-02-19 01:34:03

标签: azure json.net

编辑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消息=无法将字符串转换为DateTime:   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。

1 个答案:

答案 0 :(得分:0)

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