2011-10-13 13 views
5

विजुअल स्टूडियो के भीतर क्विकवॉच विंडो में स्ट्रीम की सामग्री को मैं कैसे देखूं?विजुअल स्टूडियो की क्विकवॉच विंडो में स्ट्रीम की सामग्री देखें

अद्यतन

डैनियल जवाब के अनुसार, मैं निम्नलिखित कोड का इस्तेमाल किया -

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

+0

कौन सा स्ट्रीम? स्टीरम पाठ/बाइनरी/एक्सएमएल है? – sll

+0

यह एक मेमोरीस्ट्रीम है जिसमें JSON – 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

यह मेरे लिए काम करता है जब मैंने एन्कोडिंग और बाइंडिंगफ्लैग के लिए पूर्ण नामस्थान शामिल किया – AndrewS

2

मैं वहाँ कुछ भी सामान्य बनाया है में, के बाद से QuickWatch आम तौर पर प्रभावित करने के लिए नहीं बनाया गया है पर विश्वास नहीं करते क्या देखा जा रहा है, और एक धारा से पढ़ना आंतरिक रूप से आंतरिक स्थिति (जैसे वर्तमान स्थिति) को बदलता है - यह भी मानते हुए कि धारा can be read

और फिर भी, सभी स्ट्रीम support seeking नहीं, इसलिए स्ट्रीम से पढ़ने से वास्तविक डेटा के लिए पढ़ा गया डेटा अनुपलब्ध हो जाएगा, उस डेटा को पुनर्प्राप्त करने का कोई मतलब नहीं है।


परिस्थितियों में, यदि आप एक byte बफर से MemoryStream का निर्माण, या यदि GetBuffer() लागू होता है, byte बफर पर नजर संभव होगा, बल्कि धारा को देखने के लिए कोशिश कर रहा से।

संबंधित मुद्दे