我真的很困惑下面发生了什么。如果我只是尝试并返回在using语句中创建的MemoryStream,则它不起作用。然而,如果我调用ToArray并创建另一个流,它工作得很好。我也尝试过将第一个MemoryStream从using语句中取出,但结果是相同的。
using (MemoryStream memoryStream = new MemoryStream())
{
using (StreamWriter streamWriter = new StreamWriter(memoryStream))
{
using (JsonWriter jsonWriter = new JsonTextWriter(streamWriter))
{
JsonSerializer jsonSerializer = new JsonSerializer();
jsonSerializer.Converters.Add(new JavaScriptDateTimeConverter());
jsonSerializer.NullValueHandling = NullValueHandling.Ignore;
jsonSerializer.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
jsonSerializer.PreserveReferencesHandling = PreserveReferencesHandling.None;
jsonSerializer.Serialize(jsonWriter, account);
streamWriter.Flush();
}
}
// Works
return new MemoryStream(memoryStream.ToArray());
// Doesn't work
return memoryStream;
}
-
using
处理流。 看起来StreamWriter.Dispose()处理底层流。因此,要么找到任何替代StreamWriter的方法,要么像你一样复制。
"using"在关闭时执行隐式的. dispose()操作,所以我希望它不能很好地处理您正在尝试的内容。
我希望不使用"正在使用"的memoryStream确实会工作,好奇为什么这对你不起作用。