Usando JSON.NET para serializar objeto no fluxo de resposta do HttpClient
Olá, estou trabalhando em um projeto no qual é necessário enviar json potencialmente enorme de algum objeto via HttpClient, um JSON de 10 a 20 mb é um tamanho típico. Para fazer isso com eficiência, quero usar fluxos, ambos com o Json.Net, para serializar um objeto e fluxos para postar dados com o HttpClient.
ProblemaAqui está o trecho de serialização com o Json.net. Para trabalhar com fluxos, o Json.net espera um fluxo no qual ele gravará:
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();
}
Enquanto o HttpClient espera um fluxo do qual ele lerá:
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
...
}
Portanto, eventualmente, isso significa que ambas as classes esperam que o Stream seja criado por outra pessoa, mas não há fluxos para o Json.Net, nem para o HttpClient. Portanto, parece que o problema pode ser resolvido com a implementação de um fluxo que interceptaria solicitações de leitura feitas no fluxo somente leitura e emitia gravações mediante solicitação do fluxo somente gravação.
Pergunta, questãoTalvez alguém já tenha tropeçado nessa situação e provavelmente já tenha encontrado uma solução implementada para esse problema. Se sim, compartilhe comigo,
Agradeço antecipadamente!