BsonDocument in ApiController zurückgeben

8

Ich arbeite an einer API in ASP.NET MVC 4, ich verwende MongoDB als Backend.

Aufgrund der Tatsache, dass MongoDB BSON-Objekte speichert und zurücksendet und MVC4 JSON-Objekte zurückgibt, habe ich mir gedacht, dass es ziemlich einfach ist, das BSON bei den restlichen Aufrufen einfach zurückzugeben.

Das hat nicht funktioniert, also fand ich die Methode .toJson() für die Klasse BsonDocument , konvertiert das BSON-Objekt in eine JSON-String-Darstellung. Leider, wenn ich diese Zeichenfolge durch meine ApiController zurücksende, denkt MVC anscheinend, dass es die Zeichenfolge als JSON serialisieren sollte, was der Browser nicht interpretieren kann.

Ich möchte also fragen, ob es eine Möglichkeit gibt, die JSON-Serialisierung für eine bestimmte ApiController -Methode zu deaktivieren?

Meine aktuelle Problemumgehung besteht darin, das von .toJson() zurückgegebene JSON zu deserialisieren, bevor es zurückgegeben wird, so dass es wieder serialisiert wird, aber das scheint ziemlich verschwenderisch zu sein.

    
FrederikNS 19.09.2012, 08:47
quelle

3 Antworten

2

Vermutlich haben Sie ein Schema, das Ihrer Anwendung und der Ressource zugeordnet ist, die Ihr API-Controller zurückgeben möchte. Wenn Sie die Verwendung von json erzwingen, ignorieren Sie viele der Vorteile von WebApi, indem Sie die Inhaltsverhandlung vollständig umgehen. Was ist, wenn Ihr Kunde xml oder yaml oder ... möchte?

Das Problem besteht darin, dass WebApi nicht wissen kann, wie ein BsonDocument serialisiert werden soll. Man könnte also einen ModelBinder dafür schreiben, damit er damit umgehen kann. Alternativ, und in Anspielung auf meinen ersten Absatz, erstellen Sie stark typisierte Entitäts- / Ressourcenklassen und da sowohl MongoDB als auch WebApi bereits über diese Typen Bescheid wissen, können sie nativ mit ihnen arbeiten.

    
Craig Wilson 19.09.2012, 12:50
quelle
2

Ich bin auch auf dieses Problem gestoßen, habe die Bson-Daten genommen, jedes Dokument nach jSon auf der Web-API-Seite konvertiert, wie ich vermutet habe, und eine Liste von JSON-Strings erstellt - ich habe diese zurückgesendet und jede Zeichenfolge deserialisiert zurück zu einem Bson-Dokument:

%Vor%

Was ich in diesem Beitrag gefunden habe: String in MongoDB BsonDocument konvertieren

Bit ham fisted, aber es funktioniert.

    
Dale 16.01.2013 12:53
quelle
1

Ich stehe vor der gleichen Sache und wollte den Backend-Code vereinfachen.

Ich fand Unterstützung für dynamische funktioniert einfach seit Treiber v2.0, früher dies Jahr. Ersetzen Sie einfach BsonDocument durch dynamic Schlüsselwort wie folgt:

%Vor%

und auch für das Einfügen:

%Vor%

Es ist wirklich hilfreich, ein Migrationsskript zu erstellen. Akzeptieren Sie jedoch nicht dynamic oder 'irgendetwas' von der Client-Site.

    
CallMeLaNN 31.08.2015 11:05
quelle