DocumentDb DateTimeOffset字符串

时间:2017-01-04 16:59:15

标签: azure-cosmosdb

我的文档包含字符串字段,其中包含DateTimeOffset值。例如:

public class DateTimePocoDocument : Resource
{
    public string startTime { get; set; }
    public string endTime { get; set; }     
}

想象一下字符串值的设置如下。

myDateTimePocoDocument.startTime = DateTimeOffset.UtcNow.ToString("o");

使用.NET DocumentClient在DocumentDb中创建文档。

 public async Task<Document> InsertAsync(TDocument data)
 {
     return await Client.CreateDocumentAsync(Collection.SelfLink, data);
 }

在DocumentDb中查看文档会显示正确存储的字符串字段。

[
  {
    "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 App客户端,被序列化为SQLite并返回等等时,我需要精确性和可预测性。

当我按如下方式执行查询时:

Client.CreateDocumentQuery<TDocument>(Collection.DocumentsLink, query, new FeedOptions { EnableScanInQuery = true, EnableCrossPartitionQuery = false });

文档将上面的startTime 字符串返回为“10/01/2016 13:00:00”。我创建了一个自定义JsonConverter并将其附加到属性以查看分配给字符串属性的内容。转换器确认正在为字符串字段分配DateTime。 DocumentDb客户端选择将字符串视为日期值,因为它看起来像日期。不幸的是,在这种情况下会导致字符串值发生变化。为什么它在我的字符串上执行转换,如何在不必自定义字符串的情况下阻止它?

由于

1 个答案:

答案 0 :(得分:0)

看起来Azure Cosmos DB尚不支持 DateTimeOffset 类型。 此类支持的请求已经提交,可以跟踪here