Json.Net ne parvient pas à sérialiser en stream, mais fonctionne très bien en sérialisation

En interne, JsonConvert.SerializeObject(obj, Formatting.Indented) se résume à

 JsonSerializer jsonSerializer = JsonSerializer.Create(null); SsortingngWriter ssortingngWriter = new SsortingngWriter(new SsortingngBuilder(256), (IFormatProvider) CultureInfo.InvariantCulture); using (JsonTextWriter jsonTextWriter = new JsonTextWriter((TextWriter) ssortingngWriter)) { jsonTextWriter.Formatting = formatting; jsonSerializer.Serialize((JsonWriter) jsonTextWriter, value); } return ssortingngWriter.ToSsortingng(); 

Cela fonctionne très bien. Cependant, si je fais ce qui suit:

 ssortingng json; JsonSerializer jsonSerializer = JsonSerializer.Create(); using (var stream = new MemoryStream()) using (var streamWriter = new StreamWriter(stream, Encoding.UTF8)) using (var jsonWriter = new JsonTextWriter(streamWriter)) { serializer.Serialize(jsonWriter, cmd); stream.Position = 0; using (var reader = new StreamReader(stream)) { json = reader.ReadToEnd(); } } 

Alors la valeur de json est "" . Quelqu’un peut-il m’indiquer mon erreur?

Le problème est que vous n’avez pas streamWriter le streamWriter après avoir écrit:

 serializer.Serialize(jsonWriter, cmd); streamWriter.Flush(); stream.Position = 0; 

Sinon, pourquoi ne pas simplement utiliser un SsortingngWriter pour commencer?

 using (var writer = new SsortingngWriter()) { using (var jsonWriter = new JsonTextWriter(writer)) { serializer.Serialize(jsonWriter, cmd); Console.WriteLine(writer.ToSsortingng()); } } 

Je suppose que JsonTextWriter ou StreamWriter effectue une mise en mémoire tampon interne. Essayez donc de vider jsonWriter et / ou streamWriter avant de lire le stream de mémoire sous-jacent.