2011-10-13 7 views
5

Jak wyświetlić zawartość strumienia w oknie QuickWatch w programie Visual Studio?Wyświetlanie zawartości okna QuickWatch strumienia w Visual Studio

Aktualizacja

Jak na odpowiedź Daniela Użyłem następujący kod -

System.Text.Encoding.UTF8.GetString((byte[])stream.GetType().GetMethod("InternalGetBuffer", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(stream, null))

+0

Który strumień? jest steram to text/binary/xml? – sll

+0

To jest MemoryStream zawierający JSON – jameskind

Odpowiedz

4

Można zobaczyć zawartość MemoryStream bez zmieniania go, kiedy można poczynić pewne założenia:

  1. Strumień rzeczywiście jest to MemoryStream
  2. Twój strumień zawiera tylko dane ciąg
  3. Wiesz kodowanie tego ciągu, np UTF8 lub ASCII

Jeśli może zrobić te założenia, można użyć następującego kodu w oknie Watch:

Encoding.UTF8.GetString((byte[])stream.GetType().GetMethod("InternalGetBuffer", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(stream, null)) 

Zastrzeżenie:
To może mieć skutki uboczne nie myślałem lub może rzucić wyjątek w pewnych okolicznościach, więc nie używaj tego w kodzie produkcyjnym.

+0

Dziękuję bardzo! To działało bardzo dobrze! – jameskind

+0

To zadziałało dla mnie, gdy zawarłem pełną przestrzeń nazw dla kodowania i bindowania. – AndrewS

2

Nie wierzę, że coś rodzajowy wbudowane, ponieważ QuickWatch generalnie nie jest przeznaczony do wpływu na stan tego, co jest obserwowane, a odczyt ze strumienia z natury zmienia stan wewnętrzny (np. aktualną pozycję) - nawet zakładając, że strumień can be read.

Nawet wtedy nie wszystkie strumienie support seeking, więc odczyt ze strumienia sprawiłby, że dane odczytane byłyby niedostępne dla rzeczywistego programu, bez możliwości odzyskania tych danych.


W określonych okolicznościach, jeśli skonstruować MemoryStream z bufora byte, czy GetBuffer() ma zastosowanie, zegarek na buforze byte byłoby wykonalne, zamiast próbować obserwować strumień.

Powiązane problemy