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.