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属性直接放在感兴趣的类上,无需指定目标类型和描述。