文字列のDateTimeOffset値を含むドキュメントがあります。例:DocumentDb DateTimeOffset文字列
public class DateTimePocoDocument : Resource
{
public string startTime { get; set; }
public string endTime { get; set; }
}
文字列値が次のように設定されているとします。
myDateTimePocoDocument.startTime = DateTimeOffset.UtcNow.ToString("o");
ドキュメントは、.NET DocumentClientを使用してDocumentDbに作成されます。 DocumentDbで文書を表示する
public async Task<Document> InsertAsync(TDocument data)
{
return await Client.CreateDocumentAsync(Collection.SelfLink, data);
}
が正しく保存され文字列フィールドを示します。
[
{
"startTime": "2016-10-01T13:00:00.0000000+00:00",
"endTime": "2016-10-01T14:35:17.215947+00:00",
"id": "2b6e53e1-2099-41f8-8405-f9daf750cfc8",
"_rid": "6qt9AJ0xkgDkAwAAAAAAAA==",
"_self": "dbs/6qt9AA==/colls/6qt9AJ0xkgA=/docs/6qt9AJ0xkgDkAwAAAAAAAA==/",
"_etag": "\"3d00c96d-0000-0000-0000-586e67b40000\"",
"_attachments": "attachments/",
"_ts": 1483630513
}
]
これは、DateTimeOffset値のシリアル化と非直列化をすべて手動で処理するためです。コントローラ間でデータを移動、Azureのアプリケーションクライアントにシリアライズされますように私は、SQLiteのにバックシリアライズ取得し、精度と予測可能性を必要とするなど、など
次のように私は、クエリを実行すると:
Client.CreateDocumentQuery<TDocument>(Collection.DocumentsLink, query, new FeedOptions { EnableScanInQuery = true, EnableCrossPartitionQuery = false });
文書はstartTime 文字列を "10/01/2016 13:00:00"と返します。私はカスタムJsonConverterを作成し、の文字列プロパティに何が割り当てられているかを見るためにプロパティにアタッチしました。コンバーターは、DateTimeが文字列フィールドに割り当てられていることを確認します。 DocumentDbクライアントは、日付のように見えるため、文字列を日付値として扱うことを選択しています。残念ながら、この場合、文字列値が変更されます。なぜ私の文字列上でその翻訳を実行しているのですか?文字列をカスタマイズすることなくその翻訳を防止するにはどうすればよいですか?
おかげ
すべての日付をZulu時間(オフセットなし)のISO-8601文字列として保存することをお勧めします。したがって、 '2016-10-01T13:00:00.000Z'です。これにより、範囲照会を行う能力が保持されます。ユーザーの時間からズールー時間にこれらのクエリを構成するために使用するリテラルをシフトする必要があるかもしれませんが、それを行うための数多くのライブラリがあります。 –
Gerard、文字列を文字列として扱い、そのような変更を行うべきではないので、DocumentDBはこれを行うとは思っていません。あなたのPOCOにDateTimeOffsetプロパティが含まれている場合、それはDateTimeOffsetのデフォルトの直列化解除設定である10/01/2016 13:00:00と表示されると思います。これを確認してもらえますか?また、POCOを提供し、DocumentDBで文書をどのように作成しているか教えてください。 –
要求通りに、POCOの例とドキュメントの作成方法を追加しました。私は既にそれを持っているので、私は検索可能性に焦点を当てることを望んでいないので、私は質問からそれを削除しました。 –