Usando JSON.NET para serializar objeto no fluxo de resposta do HttpClient

Abstrato

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.

Problema

Aqui 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ão

Talvez 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!

questionAnswers(2)

yourAnswerToTheQuestion