使用CosmosClient查询CosmosDB并映射到对象

问题描述

现在我有以下代码查询我的CosmosDB:

var streamIterator = containerLogs.GetItemQueryStreamIterator("SELECT * FROM mycontainer");

while (streamIterator.HasMoreResults)
{
    var results = await streamIterator.ReadNextAsync();
    var stream = results.Content;
    using var reader = new StreamReader(stream);
    string data = await reader.ReadToEndAsync();

    // typeof what..?
    //var dbDocuments = JsonConvert.DeserializeObject<???>(data);
}

变量data将包含以下JSON:

{
    "_rid": "wDhMAJ9xYHE=","Documents": [{
        "id": "c05c4eee-32d4-458a-8ae8-d22dd0f93839","CustomProperty1": "Value 1","CustomProperty2": "Value 2","_rid": "wDhMAJ9xYHECAAAAAAAAAA==","_self": "dbs\/wDhMAA==\/colls\/wDhMAJ9xYHE=\/docs\/wDhMAJ9xYHECAAAAAAAAAA==\/","_etag": "\"00000000-0000-0000-7167-28c107aa01d6\"","_attachments": "attachments\/","_ts": 1597319093
    }],"_count": 1
}

Documents部分是我实际的“域”模型。如何轻松地将此映射回我的域模型类的列表?我使用相同的类来写入CosmosDB。

模型看起来像这样

public class MyModel
{
    [JsonProperty(PropertyName = "id")]
    public Guid Id {get;set;}
    public string CustomProperty1 {get;set;}
    public string CustomProperty1 {get;set;}
}

那么我如何查询我的CosmosDB,以便它返回此类的列表?

解决方法

有些samples对我有帮助。比较简单的情况是使用类型为GetItemQueryIterator<MyModel>的类型,但也有一个stream deserialization示例。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...