簡體   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