使用语句和Streams

时间:2011-07-14 23:07:08

标签: c#-4.0 stream using memorystream

我真的很困惑下面发生了什么。如果我只是尝试返回在using语句中创建的MemoryStream,则它不起作用。但是,如果我调用ToArray并创建另一个流,它的效果很好。我已经尝试从using语句中取出第一个MemoryStream,但结果是一样的。

        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;
        }

2 个答案:

答案 0 :(得分:0)

  1. using处理流。
  2. 看来StreamWriter.Dispose()处理底层流。因此要么找到没有StreamWriter的替代品,要么像你那样找到副本。

答案 1 :(得分:0)

“using”在关闭时会执行一个隐式的.Dispose(),所以我希望它不能很好地适应你想要的东西。

我希望不使用“使用”作为memoryStream确实会有用,好奇为什么这对你不起作用。