我正在尝试创建一个可以对所有对象执行可视化的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程序员,我习惯于在调试模式下看到特定引用指向的堆地址是什么。这使您可以一目了然地看到两个对象是否相等。此外,还有一些其他的东西值得知道,但它们可能有点冗长的解释。如果我可以使它工作,我将发布最终代码。
那么有谁知道如何让可视化工具对所有对象都有效?
答案 0 :(得分:0)
我不知道你的代码有什么问题。
但是@Bismark,目标无需序列化,因为您可以使用自己的VisualizerObjectSource
来对其进行序列化
我建议你按照它.GetType().AsseblyQualifierName
进行搜索,这将允许你包含流所包含的对象类型,因此在反序列化时你知道你的对象是一个类x
的实例。 ,我使用这种技术作为我自己的一个可视化器,因为有时你可能会在反序列化时序列化一个类的子类型,你不知道你什么时候使用它。