2011-10-13 30 views
5

如何在Visual Studio中的QuickWatch窗口中查看Stream的內容?在Visual Studio的QuickWatch窗口中查看Stream的內容

更新

按丹尼爾的答案,我用下面的代碼 -

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

+0

哪個流?是史蒂文是文本/二進制/ XML? – sll

+0

這是一個包含JSON的MemoryStream – jameskind

回答

4

您可以查看MemoryStream的內容,而不改變它的時候,你可以做一些假設:

  1. 你流確實是一個MemoryStream
  2. 您的流只包含字符串數據
  3. 你知道編碼該字符串,例如UTF8或ASCII

如果可以使這些假設,您可以在監視窗口中使用下面的代碼:

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

免責聲明:
這可能有副作用,我還沒有想過或在某些情況下可能會拋出異常,所以不要在生產代碼中使用它。

+0

非常感謝!這工作得很好! – jameskind

+0

這對我有用,一旦我包含完整的命名空間編碼和BindingFlags – AndrewS

2

我不相信有什麼通用的內置的,因爲快速監視一般不設計成影響什麼是被觀看的狀態,並且從流中讀取固有地改變內部狀態(例如當前位置) - 甚至假定流can be read

即使這樣,並非所有流support seeking,因此從流中讀取然後將使讀取的數據不可用於實際的程序,而無法恢復該數據。


在有限的情況下,如果你從一個byte緩衝構造MemoryStream,或者如果GetBuffer()是適用的,對byte緩衝手錶是可行的,而不是試圖觀看流。

相關問題