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

mos*_*ald 13 .net c# 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();
Run Code Online (Sandbox Code Playgroud)

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

随后的值json"".任何人都可以指出我的错误吗?

Jon*_*eet 18

问题是你streamWriter写完后没有刷新:

serializer.Serialize(jsonWriter, cmd);
streamWriter.Flush();
stream.Position = 0;
Run Code Online (Sandbox Code Playgroud)

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

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