首页 文章

DocumentDb DateTimeOffset字符串

提问于
浏览
0

我有包含DateTimeOffset值的 string 字段的文档 . 例如:

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中查看文档显示正确存储的 string 字段 .

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

谢谢

1 回答

  • 0

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

相关问题