Json.Net无法序列化为流,但可以很好地序列化为字符串

在内部, JsonConvert.SerializeObject(obj, Formatting.Indented)归结为

 JsonSerializer jsonSerializer = JsonSerializer.Create(null); StringWriter stringWriter = new StringWriter(new StringBuilder(256), (IFormatProvider) CultureInfo.InvariantCulture); using (JsonTextWriter jsonTextWriter = new JsonTextWriter((TextWriter) stringWriter)) { jsonTextWriter.Formatting = formatting; jsonSerializer.Serialize((JsonWriter) jsonTextWriter, value); } return stringWriter.ToString(); 

这很好用。 但是,如果我执行以下操作:

 string 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(); } } 

那么json的值是"" 。 任何人都能指出我的错误吗?

问题是你streamWriter后没有刷新streamWriter

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

或者,为什么不只是使用StringWriter开始?

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

我想JsonTextWriterStreamWriter做一些内部缓冲。 因此,在从底层内存流中读取之前,尝试刷新jsonWriter和/或streamWriter