Azure functions Azure函数与Cosmos DB绑定返回格式化日期时间?

Azure functions Azure函数与Cosmos DB绑定返回格式化日期时间?,azure-functions,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Functions,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我在CosmosDB中存储作为字符串给出的DateTime对象时遇到了一些困难。为了确保它与DateTime对象的序列化无关,我目前只处理字符串 我在数据库中存储的文档如下所示: { "available": true, "id": "391a802c-ac42-443b-860a-8ab7061b389c", "checked_date": "2020-06-04T12:53:29.4625341Z", "code": "AAAA", "_rid": "

我在CosmosDB中存储作为字符串给出的DateTime对象时遇到了一些困难。为了确保它与DateTime对象的序列化无关,我目前只处理字符串

我在数据库中存储的文档如下所示:

{
    "available": true,
    "id": "391a802c-ac42-443b-860a-8ab7061b389c",
    "checked_date": "2020-06-04T12:53:29.4625341Z",
    "code": "AAAA",
    "_rid": "w6VGAOSKaJABAAAAAAAAAA==",
    "_self": "dbs/w6VGAA==/colls/w6VGAOSKaJA=/docs/w6VGAOSKaJABAAAAAAAAAA==/",
    "_etag": "\"00000000-0000-0000-3a70-96abc3ea01d6\"",
    "_attachments": "attachments/",
    "_ts": 1591275829
}
我使用一个非常简单的函数来查询它:

[FunctionName("GetObject")]
public static async Task<IActionResult> GetObject(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "object/{code}")] HttpRequest req,
    [CosmosDB(
        databaseName: "database01",
        collectionName: "objecttable",
        ConnectionStringSetting = "CosmosDBString",
        SqlQuery = "SELECT c.id, c.code, c.available, c.checked_date FROM objecttable c WHERE LOWER(c.code)=LOWER({code})")] IEnumerable<ObjectEntity> entities,
                ILogger log)
{
    log.LogInformation("GetObject function processed a request.");
    return new JsonResult(entities);
}
在“checked_date”字段中存储一些任意字符串数据时,该字符串将按预期返回。当我存储像“2020-06-04T12:53:29.4625341Z”这样的字符串时,返回的是“06/04/2020 12:53:29”——而没有应用任何反序列化、类型转换或类似的操作

使用CosmosDB资源管理器,我看到了正确的字符串表示形式

这与Azure函数的返回对象无关,问题已经出现在函数中。如果我在函数中设置断点,我可以看到entities对象中的字符串已经搞乱了

我做错了什么?CosmosDB的捆绑把我的绳子弄乱了吗


更新: 我已经将CosmosDB连接模式设置为“直接”,并使用Fiddler跟踪请求。似乎CosmosDB确实在响应体中返回了正确的字符串:

{"_rid":"w6VGAOSKaJA=","Documents":[{"id":"391a802c-ac42-443b-860a-8ab7061b389c","code":"AAAA","available":true,"checked_date":"2020-06-04T12:53:29.4625341Z"}],"_count":1}

因此,问题必须与绑定本身或反序列化有关?

这可能与使用默认Newtonsoft.Json序列化程序设置的SDK有关,该设置将字符串解析为datetime(和),
DateParseHandling。没有任何
可以解决此问题

绑定不允许您定义如何初始化
DocumentClient
。一种替代方法是维护您自己的实例,而不是使用绑定(我想最终会有更多的代码)
DocumentClient
有一个构造函数,让您指定
JsonSerializerSettings
的实例

确保按照以下步骤创建实例

另一种选择是全局设置,但这会影响使用Newtonsoft.Json的所有其他代码:


最后,您可以在属性上创建一个自定义转换器,该转换器只按原样输出文本。

谢谢!根据您的提示,我发现了以下错误报告:该行为是由Json.Net设计的,因此我肯定需要为序列化指定自己的设置,这将导致使用DocumentClient而不是由绑定创建的DocumentClient。
{"_rid":"w6VGAOSKaJA=","Documents":[{"id":"391a802c-ac42-443b-860a-8ab7061b389c","code":"AAAA","available":true,"checked_date":"2020-06-04T12:53:29.4625341Z"}],"_count":1}