используя заявления и потоки - PullRequest
0 голосов
/ 15 июля 2011

Я действительно не понимаю, что происходит ниже.Если я просто попытаюсь вернуть MemoryStream, созданный в операторе using, он не будет работать.Однако, если я вызываю 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;
        }

Ответы [ 2 ]

0 голосов
/ 15 июля 2011

«использование» выполняет неявное .Dispose () при закрытии, поэтому я ожидаю, что это не будет хорошо играть с тем, что вы пытаетесь.

Я ожидаю, что не используя «использование»"для memoryStream действительно будет работать, любопытно, почему это не сработало для вас.

0 голосов
/ 15 июля 2011
  1. using удаляет поток.
  2. Похоже, что StreamWriter.Dispose () удаляет базовый поток. Так что либо найдите альтернативу StreamWriter, которая этого не делает, либо сделайте копию, как вы сделали.
...