Verwenden von JSON.NET zum Serialisieren von Objekten in den Antwortdatenstrom von HttpClient
Hallo, ich arbeite an einem Projekt, bei dem es erforderlich ist, potenziell große JSON-Daten von Objekten über HttpClient zu senden. Eine JSON-Datei von 10 bis 20 MB ist eine typische Größe. Um das effizient zu machen, möchte ich Streams verwenden, sowohl mit Json.Net, um ein Objekt zu serialisieren, als auch Streams zum Posten von Daten mit HttpClient.
ProblemHier ist das Snippet für die Serialisierung mit Json.net. Um mit Streams arbeiten zu können, erwartet Json.net einen Stream, in den geschrieben wird:
public static void Serialize( object value, Stream writeOnlyStream )
{
StreamWriter writer = new StreamWriter(writeOnlyStream); <-- Here Json.net expects the stream to be already created
JsonTextWriter jsonWriter = new JsonTextWriter(writer);
JsonSerializer ser = new JsonSerializer();
ser.Serialize(jsonWriter, value );
jsonWriter.Flush();
}
Während HttpClient einen Stream erwartet, aus dem er liest:
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:54359/");
var response = await client.PostAsync("/api/snapshot", new StreamContent(readOnlyStream)); <-- The same thing here, HttpClient expects the stream already to exist
...
}
Das bedeutet also, dass beide Klassen davon ausgehen, dass der Stream von einer anderen Person erstellt wird. Es gibt jedoch weder für Json.Net noch für HttpClient Streams. Das Problem kann also gelöst werden, indem ein Stream implementiert wird, der Leseanforderungen abfängt, die an einen Nur-Lese-Stream gesendet werden, und Schreibvorgänge auf Anforderung von einem Nur-Lese-Stream ausgibt.
FrageVielleicht ist jemand bereits auf eine solche Situation gestoßen und hat wahrscheinlich bereits eine Lösung für dieses Problem gefunden. Wenn ja, teilen Sie es bitte mit mir,
Danke im Voraus!