如何从 Xamarin 应用程序中的 CosmosDB 中提取无架构的 JSON 文档

问题描述

我正在 Xamarin 中创建一个应用程序,并且在从我的 CosmosDB 查询通用 JSON 文档时遇到问题。我能够使用已知结构查询我的数据库(与我们在 Xamarin Todo 示例中看到的非常相似):

public async static Task<List<TodoItem>> GetTodoItems()
{
var todos = new List<TodoItem>();

if (!await Initialize())
    return todos;

**var todoQuery = docclient.CreateDocumentQuery<TodoItem>(
    UriFactory.CreateDocumentCollectionUri(databaseName,collectionName),new FeedOptions { MaxItemCount = -1,EnableCrosspartitionQuery = true })
    .Where(todo => todo.Completed == false)
    .AsDocumentQuery();**

while (todoQuery.HasMoreResults)
{
    var queryResults = await todoQuery.ExecuteNextAsync<TodoItem>();

    todos.AddRange(queryResults);
}

return todos;
}

我看到的这种“代码固定方案”方法的问题是,如果您的 JSON 文件方案在整个开发过程中发生变化,旧版本的代码将覆盖 CosmosDB 中的新方案,因为写入数据库是在文档级别并且不是财产级别。相反,对于旧版本的代码来说,能够拉取最新方案并使用它知道的属性而不必强制用户更新会很有帮助。

有谁知道如何从 CosmosDB 中查询无模式的 JSON 文档?谢谢!

解决方法

使用 JObject 作为从 CosmosDB 中查询无模式 JSON 文档的类型,并使用以下代码将原始 JSON 数据提取到您的对象中:

JsonConvert.DeserializeObject<Class>(JSONString);