2010-06-02 70 views
10

我想创建一个调试器可视化器,它将显示任何Control的控制层次结构。它完成了,但我得到了异常“类型未标记为可序列化”调试器可视化器和“类型不被标记为可序列化”

我该如何克服这一点?控件是.NET Windows窗体框架类型,我不能将其标记为可序列化。

+1

你有没有添加[Serializable接口]属性的类?如果没有,你的课不能被序列化。 – Justin 2010-06-02 15:52:35

+0

我正在为.NET框架类编写调试器可视化工具,我无法添加任何东西 – Andrey 2010-06-02 16:06:05

回答

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

我创建了一个Visualizer,通过使用该代码示例查看Infragistics的UltraDataSource源,并且它工作得很好。 – Samuel 2010-12-09 15:26:55

+1

您也可以将DebuggerVisualizer属性直接放在感兴趣的类上,而无需指定目标类型和描述。 – Teejay 2015-02-13 15:02:01

相关问题