Отладчик визуализатора и «Тип не помечен как сериализуемый» - PullRequest
10 голосов
/ 02 июня 2010

Я пытаюсь создать визуализатор отладчика, который бы отображал иерархию управления для любого Control. Это сделано, но я получаю исключение "Тип не помечен как сериализуемый" .

Как мне преодолеть это? Элемент управления представляет собой тип платформы .NET Windows Forms, я не могу пометить его как сериализуемый.

1 Ответ

19 голосов
/ 02 июня 2010

Вам также потребуется реализовать 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")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...