我有包含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 回答
看起来Azure Cosmos DB还不支持 DateTimeOffset 类型 . 此类支持的请求已经提交,可以跟踪here .