2017-03-08 6 views
1

Wenn ich eine einfache Klasse:Newtonsoft Serialisierung vs ASP.NET Serialisierung

public class UserId 
{ 
    public string Id { get; set; } 
} 

und ich übergeben es an HttpRequest.CreateResponse() ist der Ausgang:

{ "id": "1234bcf6678" } 

Allerdings, wenn ich verwenden ein JsonSerializer ich:

"{ \"id\": \"1234bcf6678\" }" 

ich verstehe, dass die zweite effektiv ein jSON-String ist, aber wie kann ich th e JsonSerializer AND das Ergebnis davon an HttpRequest.CreateResponse() übergeben, um die erste Ausgabe (d. h. keine entgangenen Zitate)?

Ich weiß, es gibt eine verwandte Frage zu SO, aber ich möchte den Newtonsoft Serializer verwenden, weil es mir erlaubt, einige generische Listen und abgeleitete Objekte korrekt zu serialisieren.

Für zusätzlichen Kontext ist es wahrscheinlich wissenswert, dass ich dies in Azure-Funktionen mache. Ich sehe, dass Web-API hat System.Web.Http.GlobalConfiguration verfügbar, aber nicht sicher Funktionen tun.

+0

ASP.Net verwendet Json.net intern und Sie können es beim Start der Anwendung konfigurieren. Können Sie genauer auf die Situation eingehen, in der ASP.Net nicht die richtige Ausgabe liefert? –

+0

Ich habe gerade einen Schnitt gemacht. Dies ist innerhalb von Azure-Funktionen, daher bin ich mir nicht sicher, ob ich die gleichen Überschreibungsoptionen über GlobalConfiguration wie in der Web-API habe. – user1200984

Antwort

1

Wenn Sie den JsonSerializer verwenden und die resultierende Zeichenfolge zurückgeben, wird sie als JSON erneut serialisiert. Sie müssen die Erweiterungsmethode HttpRequest.CreateResponse() umgehen und die Antwort manuell erstellen. Auf diese Weise können Sie den Inhalt und den Inhaltstyp selbst festlegen. Ein hilfreicher Ausgangspunkt wäre die source code for CreateResponse (Es ist um Linie 332). Anstatt ObjectContent<T> zu verwenden, verwenden Sie StringContent mit dem Medientyp "application/json".

+0

Danke Andrew, es klingt vernünftig. Es ist Ende meines Tages hier, also werde ich später versuchen und als beantwortet markieren, wenn ich bekomme, was ich dann brauche. – user1200984

+0

Konnte nicht entspannen, ohne es zu versuchen. Die Lösung ist: var response = new HttpResponse (HttpStatusCode.OK); response.Content = new StringContent (); Antwort zurücksenden; Danke für den Zeiger. – user1200984

+0

Nur ein Blick in die Köpfe, vielleicht möchten Sie den Medientyp explizit auf 'application/json' setzen - ich bin mir ziemlich sicher, StringContent deafults zu 'Anwendung/Text'. Dies wird zum Beispiel helfen, wenn Sie die Ausgabe mit jQuery konsumieren, da sie das json-Objekt automatisch parsen und ein Objekt anstelle einer Zeichenfolge zurückgeben wird. –

Verwandte Themen