Usando JSON.NET para serializar objetos en el flujo de respuesta de HttpClient
Hola, estoy trabajando en un proyecto en el que es necesario enviar json potencialmente enormes de algún objeto a través de HttpClient, un tamaño típico de 10-20 mb de JSON. Para hacerlo de manera eficiente, quiero usar secuencias, tanto con Json.Net para serializar un objeto más secuencias para publicar datos con HttpClient.
ProblemaAquí está el fragmento para la serialización con Json.net, para trabajar con transmisiones, Json.net espera una transmisión en la que escribirá:
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();
}
Mientras que HttpClient espera una secuencia de la que leerá:
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
...
}
Finalmente, esto significa que ambas clases esperan que Stream sea creado por otra persona, pero no hay streams para Json.Net ni para HttpClient. Por lo tanto, el problema parece que se puede resolver implementando una secuencia que intercepte las solicitudes de lectura realizadas en secuencia de solo lectura y emita escrituras a solicitud de la secuencia de solo escritura.
PreguntaTal vez alguien ya se haya topado con esa situación y probablemente haya encontrado una solución ya implementada para este problema. Si es así, compártelo conmigo,
¡Gracias de antemano!