0

編集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を適切に逆シリアル化します。

4

1 に答える 1

0

ISO 8601 Wikipediaの記事を読み直すと、「K」が原因であると解釈されます。'Z'ズールー時間のみが許容されます。オフセットは数値で表されます。「ISO8601のタイムゾーンは、現地時間(場所は指定されていません)、UTC、またはUTCからのオフセットとして表されます。」

于 2013-02-20T14:40:43.673 に答える