c# 4.0 -使用语句和流



我真的很困惑下面发生了什么。如果我只是尝试并返回在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;
        }
  1. using处理流。
  2. 看起来StreamWriter.Dispose()处理底层流。因此,要么找到任何替代StreamWriter的方法,要么像你一样复制。

"using"在关闭时执行隐式的. dispose()操作,所以我希望它不能很好地处理您正在尝试的内容。

我希望不使用"正在使用"的memoryStream确实会工作,好奇为什么这对你不起作用。

相关内容

  • 没有找到相关文章

最新更新