创建一个c# VS2010可视化器,可以在所有对象上操作

本文关键字:操作 对象 一个 可视化 VS2010 创建 | 更新日期: 2023-09-27 18:10:47

我正在尝试创建一个c#调试可视化器,可以对所有对象执行可视化。我似乎无法让程序集属性(在名称空间之上)将这个可视化工具绑定到System。对象,就像我能处理系统中的其他对象一样。我已经搜索了很长时间,但还没有找到任何例子/讨论创建一个可视化的所有对象。这是我试图得到工作的代码,它工作得很好,当绑定到字符串或Int32,但不是对象或对象。

[assembly: System.Diagnostics.DebuggerVisualizer(
typeof(Visualizers.ObjectVisualizer), typeof(Visualizers.RawObjectScource),
Target = typeof(object), Description = "Object Visualizer")]
namespace Visualizers
{
public class ObjectVisualizer : DialogDebuggerVisualizer
{
    override protected void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
    {
        Console.Out.WriteLine("InShow");
        MessageBox.Show(objectProvider.GetObject().ToString());
    }
}
// handle any object, doesn't require that it's Serializable
public class RawObjectScource : VisualizerObjectSource
{
    public override void GetData(object target, Stream outgoingData)
    {
        if (target != null)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(outgoingData, target.ToString());
        }
    }
}
}

作为一个使用IntelliJ的前Java程序员,我习惯了在调试模式下看到特定引用指向的堆地址是什么。这允许您一眼看到两个对象是否引用相等。此外,还有一些其他的事情是有价值的,但解释起来可能有点长。如果我能让它工作,我会张贴最后的代码。

有谁知道如何让可视化器对所有对象都是活动的吗?

创建一个c# VS2010可视化器,可以在所有对象上操作

我不知道你的代码有什么问题。然而@Bismark,目标并不一定要序列化,因为你可以使用自己的VisualizerObjectSource来序列化它

我确实建议你序列化.GetType().AsseblyQualifierName,这将允许你在流中包含什么样的对象,所以在反序列化时,你知道你的对象实际上是类x的一个实例,我使用这种技术作为我自己的可视化器之一,因为有时你可能正在序列化类的子类型,而在反序列化时,你不知道你在什么时候工作。