我正在尝试创建一个调试器可视化器,显示任何控件的控制层次结构.已经完成,但是我收到了异常“Type not not as serializable”.
我该如何克服呢? Control是一个.NET Windows Forms框架类型,我不能将其标记为可序列化.
解决方法
您还需要实现一个
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")]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。