繁体   English   中英

创建一个对所有Object进行操作的C#VS2010 Visualizer

[英]Creating a C# VS2010 Visualizer that operates on all Object

我正在尝试创建一个可以对所有对象执行可视化的C#调试可视化工具。 我似乎无法获得程序集属性(在命名空间上方)将此可视化程序绑定到System.Object,就像我已经能够与系统中的其他对象一样。 我已经搜索了很长时间,但没有找到任何关于为所有对象创建可视化器的示例/讨论。 这是我正在努力工作的代码,它在绑定到String或Int32时运行良好,但不是Object或object。

[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程序员,我习惯于在调试模式下看到堆地址是特定引用所指向的。 这使您可以一目了然地看到两个对象是否相等。 此外,还有一些其他的东西值得知道,但它们可能有点冗长的解释。 如果我能让它工作,我会发布最终的代码。

那么有谁知道如何使可视化器对所有对象都有效?

我不知道你的代码有什么问题。 但是@Bismark,目标不需要序列化,因为你可以使用自己的VisualizerObjectSource来对其进行sesialize

我建议你按顺序搜索.GetType().AsseblyQualifierName ,这将允许你包含流所包含的对象类型,所以在反序列化时你知道你的对象是acutaly类x一个实例,我用这个技术一个我自己的可视化器有时候你可能会在反序列化中序列化一个类的子类型,你不知道你在什么时候使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM