2010-06-02 12 views
10

मैं एक डीबगर विजुअलाइज़र बनाने की कोशिश कर रहा हूं जो किसी भी Control के लिए नियंत्रण पदानुक्रम दिखाएगा। यह हो गया है लेकिन मुझे अपवाद मिल रहा है "टाइप को धारावाहिक के रूप में चिह्नित नहीं किया गया है"डीबगर विजुअलाइज़र और "टाइप को धारावाहिक के रूप में चिह्नित नहीं किया गया है"

मैं इसे कैसे दूर कर सकता हूं? नियंत्रण एक .NET विंडोज फॉर्म फ्रेमवर्क प्रकार है, मैं इसे serializable के रूप में चिह्नित नहीं कर सकता।

+1

आप को शामिल किया है [Serializable] कक्षा में विशेषता? इसके बिना आपकी कक्षा को क्रमबद्ध नहीं किया जा सकता है। – Justin

+0

मैं .NET फ्रेमवर्क कक्षाओं के लिए एक डीबगर विज़ुअलाइज़र लिख रहा हूं, मैं कुछ भी – Andrey

उत्तर

19

कस्टम सीरियलाइजेशन करने के लिए आपको VisualizerObjectSource को भी लागू करने की आवश्यकता होगी।

उदाहरण:

public class ControlVisualizerObjectSource : VisualizerObjectSource 
{ 
    public override void GetData(object target, Stream outgoingData) 
    { 
     var writer = new StreamWriter(outgoingData); 
     writer.WriteLine(((Control)target).Text); 
     writer.Flush(); 
    } 
} 
public class ControlVisualizer : DialogDebuggerVisualizer 
{ 
    protected override void Show(
     IDialogVisualizerService windowService, 
     IVisualizerObjectProvider objectProvider) 
    { 
     string text = new StreamReader(objectProvider.GetData()).ReadLine(); 
    } 
    public static void TestShowVisualizer(object objectToVisualize) 
    { 
     var visualizerHost = new VisualizerDevelopmentHost(
      objectToVisualize, 
      typeof(ControlVisualizer), 
      typeof(ControlVisualizerObjectSource)); 
     visualizerHost.ShowVisualizer(); 
    } 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     ControlVisualizer.TestShowVisualizer(new Control("Hello World!")); 
    } 
} 

तुम भी विनियोजित VisualizarObjectSource है, जो इस उदाहरण के लिए कुछ इस तरह हो सकता है के साथ विजुआलाइज़र रजिस्टर करने के लिए की आवश्यकता होगी:

[assembly: DebuggerVisualizer(
    typeof(ControlVisualizer), 
    typeof(ControlVisualizerObjectSource), 
    Target = typeof(System.Windows.Forms.Control), 
    Description = "Control Visualizer")] 
+1

जोड़ नहीं सकता हूं मैंने कोड के उस नमूने का उपयोग करके इन्फ्रास्टिक्स के अल्ट्राडाटासोर्स के स्रोत को देखने के लिए विजुअलाइज़र बनाया है और यह बहुत अच्छा काम करता है। – Samuel

+1

आप लक्ष्य प्रकार और विवरण निर्दिष्ट करने की आवश्यकता के बिना सीधे रुचि वर्ग पर डीबगर विज़ुअलाइज़र विशेषता भी डाल सकते हैं। – Teejay

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

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