如何在 Xamarin App 中从 CosmosDB 中提取无模式 JSON 文档
How to pull down an schema-less JSON document from CosmosDB in Xamarin App
我正在 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);
我正在 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);