编辑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 文章,我现在将“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。
原始问题
我有一个使用.php 构建的 Json 数据的 Windows 商店应用程序。我最近一直在增强它以与 Windows Azure 一起使用。我“拥有”代码并且可以更正它以对其他人有用并遵循“标准”为此我正在尝试标准化我的 Json,特别是 DateTime(让我感到困惑)
这是一个有效的 ISO 8601 日期吗?"Time":"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。