2011-10-13 10 views
5

Come visualizzare il contenuto di un flusso nella finestra QuickWatch in Visual Studio?Visualizzare il contenuto di un flusso nella finestra QuickWatch di Visual Studio

Aggiornamento

Come per la risposta di Daniel Ho usato il seguente codice -

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

+0

Quale stream? è steram è text/binary/xml? – sll

+0

È un MemoryStream contenente JSON – jameskind

risposta

4

È possibile visualizzare il contenuto del MemoryStream senza alterarla quando si può fare alcune ipotesi:

  1. tuo flusso in effetti è un MemoryStream
  2. tuo flusso contiene solo i dati stringa
  3. Sai la codifica di quella stringa, ad es UTF8 o ASCII

Se possibile fare queste ipotesi, è possibile utilizzare il seguente codice nella finestra Watch:

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

responsabilità:
Questo potrebbe avere effetti collaterali non ho pensato di o potrebbe generare un'eccezione in determinate circostanze, quindi non utilizzare questo nel codice di produzione.

+0

Grazie mille! Questo ha funzionato molto bene! – jameskind

+0

Questo ha funzionato per me una volta incluso lo spazio dei nomi completo per Encoding e BindingFlags – AndrewS

2

Non credo ci sia nulla di generico integrato, dal momento Controllo immediato non è generalmente progettata per influenzare il stato di ciò che viene guardato, e la lettura da un flusso altera intrinsecamente lo stato interno (ad esempio la posizione corrente) - anche assumendo che il flusso can be read.

E anche allora, non tutti i flussi support seeking, quindi la lettura dallo stream renderebbe i dati letti non disponibili per il programma effettivo, senza alcun mezzo per recuperare quei dati.


In circostanze limitate, se si costruisce il MemoryStream da un buffer byte, o se GetBuffer() è applicabile, un orologio sul buffer byte saresti fattibile, piuttosto che cercare di guardare il flusso.

Problemi correlati