2010-06-02 11 views
10

Estoy tratando de crear un visualizador de depurador que mostraría jerarquía de control para cualquier Control. Está hecho pero obtengo la excepción "El tipo no está marcado como serializable".depurador visualizador y "Type no está marcado como serializable"

¿Cómo lo supero? Control es un tipo de marco de .NET Windows Forms, no puedo marcarlo como serializable.

+1

Agregue el [Serializable] atribuir a la clase? Sin eso tu clase no puede ser serializada. – Justin

+0

Estoy escribiendo un visualizador de depuración para las clases .NET framework, no puedo agregar nada – Andrey

Respuesta

19

También deberá implementar un VisualizerObjectSource para realizar una serialización personalizada.

Ejemplo:

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!")); 
    } 
} 

También tendrá que registrar el visualizador con el VisualizarObjectSource apropiado, que para este ejemplo podría ser algo como esto:

[assembly: DebuggerVisualizer(
    typeof(ControlVisualizer), 
    typeof(ControlVisualizerObjectSource), 
    Target = typeof(System.Windows.Forms.Control), 
    Description = "Control Visualizer")] 
+1

He creado un Visualizador para ver el origen de UltraDataSource de Infragistics con el uso de esa muestra de código y funciona muy bien. – Samuel

+1

También puede colocar el atributo DebuggerVisualizer directamente en la clase interesada, sin la necesidad de especificar el Tipo de destino y la Descripción. – Teejay

Cuestiones relacionadas