2011-10-13 13 views
5

Visual Studio içindeki QuickWatch penceresinde bir Akışın içeriğini nasıl görüntüleyebilirim? Visual Studio'nun QuickWatch penceresinde bir Akışın içeriğini görüntüleme

Güncelleme

Daniel'in Yanıt başına olarak ben aşağıdaki kodu kullanılmış -

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

+0

Hangi Akış? steram text/binary/xml nedir? – sll

+0

JSON – jameskind

cevap

4

bazı varsayımlarda zaman Bunu değiştirmeden MemoryStream içeriğini görüntüleyebilirsiniz:

  1. Akışınız gerçekten Akışınız sadece dize verileri
  2. Sen kodlamayı biliyor içeren bir MemoryStream
  3. olduğunu bu dizgenin Eğer Bu varsayımları yapabiliyorsa UTF8 veya ASCII

, İzleme penceresinde aşağıdaki kodu kullanabilirsiniz:

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

Yasal Uyarı:
Bu düşündüğümden değil yan etkilere sahip olabilir Bazı durumlarda bir istisna atar veya bu nedenle üretim kodunda bunu kullanmayın.

+0

içeren bir MemoryStream ürünüdür. Çok teşekkür ederim! Bu çok iyi çalıştı! – jameskind

+0

Encoding ve BindingFlags için tam ad alanını dahil ettikten sonra bu benim için çalıştı – AndrewS

2

Ben QuickWatch genellikle etkilediği tasarlanmamıştır yana inşa jenerik şey, orada inanmıyorum neyin izlendiğini ve bir akıştan okuduğunu, içsel durumu (örneğin şu anki pozisyonu) doğal olarak değiştirir - hatta can be read akışının olduğunu varsayarak.

Ve hatta, tüm akışlar support seeking değil, bu nedenle akıştan okunan veriler, daha sonra bu verilerin kurtarılması için hiçbir şekilde, gerçek program için okunamayan verilerin okunmasını sağlar. sınırlı koşullarda


, bir byte tamponundan MemoryStream yapının veya GetBuffer() uygulanabilir ise, byte tampon üzerine bir saat daha çok akışını izlemek için çalışırken daha yapılabilir olurdu.

İlgili konular