3

我有一个使用嵌入式 RavenDB 存储数据的 Asp.Net MVC3 应用程序。视图需要控制器现在以这种方式创建的 json 数据:

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

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

有没有更直接的方法可以直接从嵌入式数据库中获取 json 数据?

4

1 回答 1

7

这根本不是低效的。请记住,在内部,raven 实际上使用 BSON - 所以无论如何你都必须翻译它。还有元数据字段。如果您直接通过控制器返回它,您将没有机会塑造数据的响应并去除不需要的字段。

如果您必须继续这种思路,您有两个选择:

  1. 您可以使用 DocumentStore.DatabaseCommands.Get() 和相关操作返回 RavenJObjects,然后您可以从中转换 JSON。

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

这些都不是直截了当的,而且您正在抛弃 Raven 客户端 API 的许多优点。恕我直言,您要实现的任何性能提升都不会引起注意。我会坚持你目前的做法。

另外 - 如果您只是想避免在此处进行序列化,请考虑返回 JsonResult 而不是 ContentResult。如果您想改用 Json.Net(根据您最近的另一篇文章),这是一种更简洁的方法:http: //james.newtonking.com/archive/2008/10/16/asp-net-mvc-和-json-net.aspx

于 2012-09-28T19:36:26.363 回答