visual studio remarks cref c# visual-studio-2012

c# - remarks - visual studio summary shortcut



Visual Studio cómo serializar el objeto del depurador (7)

Intento investigar un error en un volcado (así que no puedo cambiar el código). Tengo un objeto realmente complicado (miles de líneas en la representación serializada) y su estado es inconsistente. Para investigar su estado, la vista del depurador de Visual Studio es inútil. Pero el objeto tiene un contrato de datos. Me gustaría serializarlo y luego usar mi editor de texto favorito para navegar por el objeto. ¿Es posible hacer desde el depurador?



Con un poco de suerte ya tienes Json.Net en tu appdomain. En ese caso, coloque esto en su ventana Inmediato:

Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)


Podría ser posible usar la ventana intermedia para serializarlo y luego copiar el contenido a su editor favorito.

Otra opción es anular el método ToString () y llamarlo mientras está en modo de depuración.

También puede escribir los contenidos en un archivo poco antes del bloqueo, o ajustar el código en un try / catch y luego escribir el archivo. Supongo que puedes identificar cuándo se está cayendo.


Tengo un método de extensión que uso:

public static void ToSerializedObjectForDebugging(this object o, FileInfo saveTo) { Type t = o.GetType(); XmlSerializer s = new XmlSerializer(t); using (FileStream fs = saveTo.Create()) { s.Serialize(fs, o); } }

Sobrecargo con una cadena para saveTo y lo llamo desde la ventana inmediata:

public static void ToSerializedObjectForDebugging(this object o, string saveTo) { ToSerializedObjectForDebugging(o, new FileInfo(saveTo)); }


Una variación de la respuesta de Omar Elabd -

No es gratis, pero hay una versión de prueba gratuita para OzCode
( https://marketplace.visualstudio.com/items?itemName=CodeValueLtd.OzCode ).

Hay una exportación incorporada a JSON dentro del menú contextual / contextual allí, y funciona un poco mejor que la extensión de exportación de objetos (la compensación no es gratuita).

http://o.oz-code.com/features#export (demo)

Sé que esto es unos años después del hecho, pero dejo una respuesta aquí porque esto funcionó para mí, y alguien más puede encontrarlo útil.


Una variación en la respuesta de Alexey. Un poco más complicado, pero no implica escribir en un archivo de texto:

1) En la ventana Inmediato, ingrese:

System.IO.StringWriter stringWriter = new System.IO.StringWriter();

2) En la ventana de observación, ingrese dos relojes:

a. stringWriter b. new System.Xml.Serialization.XmlSerializer(obj.GetType()).Serialize(stringWriter, obj)

Después de ingresar el segundo reloj (Serialize), el valor de reloj de stringWriter se establecerá en obj serializado a XML. Copia y pega. Tenga en cuenta que el XML se incluirá entre llaves, {...}, por lo que deberá eliminarlo si desea usar el XML para cualquier cosa.


Hace algún tiempo escribí este one-liner serializando un objeto a un archivo en el disco. Cópialo / pégalo en tu ventana intermedia y reemplaza obj (se hace referencia dos veces) con tu objeto. Guardará el archivo text.xml en c: / temp, cámbialo a tu gusto.

(new System.Xml.Serialization.XmlSerializer(obj.GetType())).Serialize(new System.IO.StreamWriter(@"c:/temp/text.xml"), obj)

Sin embargo, no esperes magia, si el objeto no se puede serializar, lo hará a través de una excepción.