2012-09-28 1 views
3

J'ai une application Asp.Net MVC3 qui utilise RavenDB incorporé pour stocker des données. La vue a besoin de données JSON qui est maintenant créé par le contrôleur de cette façon:Obtenir des données JSON à partir de RavenDB

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

Tout fonctionne bien, mais pour moi, il semble inefficace, car les données qui sont stockées dans DB au format JSON est publié en feuilleton dans POCO puis désérialisée encore.

Existe-t-il un moyen plus direct d'obtenir des données json directement à partir de la base de données embarquée?

Répondre

7

Ce n'est pas inefficace du tout. Gardez à l'esprit qu'en interne, le corbeau utilise réellement BSON - vous devrez donc le traduire de toute façon. Il existe également des champs de métadonnées. Si vous deviez le renvoyer directement via votre contrôleur, vous n'auriez aucune possibilité de façonner la réponse des données et de supprimer les champs indésirables.

Si vous devez continuer avec cette ligne de pensée, vous avez deux options:

  1. Vous pouvez utiliser le DocumentStore.DatabaseCommands.Get() et les opérations liées au retour RavenJObjects que vous pourriez traduire JSON .

  2. Vous pouvez parler directement à la base de données Raven via HTTP sans utiliser le client corbeau.

Aucune de ces solutions ne sont simples, et vous jetez beaucoup de bonté de l'API Raven Client. À mon humble avis, tout gain de performance que vous deviez réaliser serait imperceptible. Je m'en tiens à votre approche actuelle.

Egalement - Si vous essayez simplement d'éviter d'avoir à sérialiser ici, pensez à renvoyer un JsonResult au lieu d'un ContentResult. Si vous voulez utiliser Json.Net à la place (par votre autre poste récent), Voici une façon plus propre de le faire: http://james.newtonking.com/archive/2008/10/16/asp-net-mvc-and-json-net.aspx

+0

Merci l'homme. Réponse très utile! – Roberto

Questions connexes