C# 调试器可视化工具和;类型未标记为可序列化";

C# 调试器可视化工具和;类型未标记为可序列化";,c#,visual-studio-2008,serialization,debuggervisualizer,C#,Visual Studio 2008,Serialization,Debuggervisualizer,我正在尝试创建一个调试器可视化工具,它将显示任何控件的控件层次结构。完成了,但我得到了异常“类型未标记为可序列化” 我如何克服这一点?控件是.NET Windows窗体框架类型,我无法将其标记为可序列化 您还需要实现一个来执行自定义序列化 例如: public class ControlVisualizerObjectSource : VisualizerObjectSource { public override void GetData(object target, Stream o

我正在尝试创建一个调试器可视化工具,它将显示任何
控件的控件层次结构。完成了,但我得到了异常“类型未标记为可序列化”


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

您还需要实现一个来执行自定义序列化

例如:

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")]

您是否已将[Serializable]属性添加到类中?如果没有这一点,您的类将无法序列化。我正在为.NET framework类编写一个调试器可视化工具,我无法添加任何内容。我已经创建了一个可视化工具,使用该代码示例查看基础设施的UltraDataSource源,效果非常好。您还可以将DebuggerVisualizer属性直接放在感兴趣的类上,无需指定目标类型和描述。