2012-09-28 189 views
3

我有一个使用嵌入式RavenDB存储数据的Asp.Net MVC3应用程序。 的观点需要的是现在由控制器以这种方式创建JSON数据:从RavenDB获取JSON数据

public ContentResult Data() 
    { 
     var res = JsonConvert.SerializeObject(DocumentSession.Query<DataObject>()); 
     return new ContentResult { Content = res, ContentType = "application/json" }; 
    } 

一切工作正常,但对我来说,因为存储在数据库中的JSON格式的数据在POCO序列化,然后反序列化似乎效率不高再次。

有没有更直接的方式来从嵌入式数据库直接获取json数据?

回答

7

它根本没有低效率。请记住,在内部,乌鸦实际上使用BSON--因此无论如何您都必须翻译它。还有元数据字段。如果你直接通过你的控制器返回它,你将没有机会调整数据的响应并去掉不需要的字段。

如果你必须用这种思路继续下去,你有两个选择:

  1. 您可以使用DocumentStore.DatabaseCommands.Get()及相关操作返回RavenJObjects,你可以再由翻译JSON 。

  2. 您可以通过HTTP直接与Raven数据库通话,而无需使用乌鸦客户端。

这些都不是直截了当,并且你正在抛弃Raven Client API的许多优点。恕我直言,你要达到的任何性能收益都不会令人难以察觉。我会坚持你目前的做法。

另外 - 如果你只是想避免在这里序列化,考虑返回一个JsonResult而不是一个ContentResult。如果你想使用Json.Net(根据你最近的其他帖子),下面是一个更清晰的方法:http://james.newtonking.com/archive/2008/10/16/asp-net-mvc-and-json-net.aspx

+0

谢谢你。非常有用的回应! – Roberto