我想创建一个调试器可视化器,它将显示任何Control
的控制层次结构。它完成了,但我得到了异常“类型未标记为可序列化”。调试器可视化器和“类型不被标记为可序列化”
我该如何克服这一点?控件是.NET Windows窗体框架类型,我不能将其标记为可序列化。
我想创建一个调试器可视化器,它将显示任何Control
的控制层次结构。它完成了,但我得到了异常“类型未标记为可序列化”。调试器可视化器和“类型不被标记为可序列化”
我该如何克服这一点?控件是.NET Windows窗体框架类型,我不能将其标记为可序列化。
您还需要执行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")]
你有没有添加[Serializable接口]属性的类?如果没有,你的课不能被序列化。 – Justin 2010-06-02 15:52:35
我正在为.NET框架类编写调试器可视化工具,我无法添加任何东西 – Andrey 2010-06-02 16:06:05