2017-03-01 38 views
1

我正在使用Azure DocumentDB使用动态数据类型,即,我没有为正在使用的数据预定义任何类。我查询使用形式的电话我DocumentDb数据库/集合:使用Azure DocumentDB和MVC5处理动态数据

client.CreateDocumentQuery<dynamic>(UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId), query).ToArray(); 

得到返回的对象似乎是类型Micrsoft.Azure.Documents.QueryResult的。

当查询作为MVC动作的一部分包含在内时,当结果传递回客户端时,它们将变为空对象。

我期待能够获得'动态'数据,这将作为JsonResponse的一部分进行序列化。

我需要做些什么来将每个Micrsoft.Azure.Documents.QueryResult转换为动态?

回答

3

根据您的描述,我尝试构建自己的MVC Web应用程序,并且遇到了与您提到的相同的问题。

我期待能够获得'动态'数据,这将作为JsonResponse的一部分进行序列化。

你可以利用下面的代码:

var results=client.CreateDocumentQuery<dynamic>(UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId), query).ToArray(); 
return Content(JsonConvert.SerializeObject(results), "application/json"); 

结果

enter image description here

+1

优秀 - 这真是棒极了。非常感谢。作为后续工作,使用这种方法,DocumentDb特定字段(如_attach,_etag,_rid,_self和_ts)也会被序列化(如您在屏幕截图中所示)。任何想法如何最好的这些可以被排除/删除? – ProfNimrod

+2

您可以利用仅基于您的场景序列化属性的自定义[IContractResolver](http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Serialization_IContractResolver.htm)(排除名称为_attach,_etag, _rid等),有关更多详细信息,请参阅本教程(http://www.newtonsoft.com/json/help/html/CustomContractResolver.htm)。 –