編集2:
Windows Phone 8アプリケーションを作成し、Microsoft.WindowsAzure.MobileServicesを含めました。元の質問の以下の問題のあるコードと同じクラスで、json.netDIDが正常に逆シリアル化するレコードを作成しました。
[{"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'ズールー時間のみが許容されます。オフセットは数値で表されます。「ISO8601のタイムゾーンは、現地時間(場所は指定されていません)、UTC、またはUTCからのオフセットとして表されます。」
Azureでテーブルデータを作成できるように、サポートされていない.dllを使用して「K」.netmfを投稿するクライアント向けのソリューションを投稿しようと思います。
編集1:
エラーをステップスルーするためにソリューションにjson.netを含めたところ、次のことがわかりました。
Newtonsoft.Json.JsonReaderExceptionはユーザーコードによって処理され
ませんでしたHResult=-2146233088メッセージ=文字列をDateTimeに変換できませんでした:2013-02-18T06:35:25.604K。パス'[0].Time'、行1、位置74。
元の質問
.phpで作成したJsonデータを処理するWindowsストアアプリがあります。最近、WindowsAzureで動作するように拡張しています。私はコードを「所有」し、他の人に役立つように修正し、そのために「標準」に従うことができます。そのために、Json、特にDateTimeを標準化しようとしています(混乱しています)
これは有効なISO8601日付ですか?"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},
これは、日付と時刻の間に「T」がないため、無効なjsonISO8601日付データであると思われるものを読み取る古い作業コードです。
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データを処理する必要があるようです。Azureデータは、ISO8601形式に従ってより正確になっているようです。古い.phpコードを調整してこれを生成し(簡単に実行できます) 、Windowsストアアプリを修正してJsonを適切に逆シリアル化します。