Entonces, para ver el estado de un objeto actual en tiempo de ejecución, realmente me gusta lo que me da la ventana Inmediato de Visual Studio. Solo haciendo un simple
? objectname
Me dará un 'volcado' bien formateado del objeto.
¿Hay una manera fácil de hacer esto en código, para que pueda hacer algo similar al iniciar sesión?
Respuestas:
Podría basar algo en el código ObjectDumper que se incluye con las muestras de Linq .
También eche un vistazo a la respuesta de esta pregunta relacionada para obtener una muestra.
fuente
DumpToString
yDump
deObject
clase. Práctico.w3wp.exe
se bloquea cuando intento usarObjectDumper
likeRequest.DumpToString("aaa");
Para un gráfico de objeto más grande, secundo el uso de Json pero con una estrategia ligeramente diferente. Primero tengo una clase estática que es fácil de llamar y con un método estático que envuelve la conversión de Json (nota: podría hacer de este un método de extensión).
Entonces en tu
Immediate Window
,lookHere se mostrará automáticamente en la
Locals
ventana antepuesta con un $ o puede agregarle un reloj. En el lado derecho de laValue
columna en el inspector, hay una lupa con un cursor desplegable al lado. Elija el cursor desplegable y elija el visualizador Json.Estoy usando Visual Studio 2013.
fuente
Newtonsoft.Json.JsonConvert.SerializeObject(sampleData, Formatting.Indented)
Estoy seguro de que hay mejores formas de hacerlo, pero en el pasado he usado un método similar al siguiente para serializar un objeto en una cadena que puedo registrar:
Verá que el método también puede devolver la excepción en lugar del objeto serializado, por lo que querrá asegurarse de que los objetos que desea registrar sean serializables.
fuente
Failed to access type 'System.__ComObject' failed
. Novato a C #, agradecería ayuda.Puede usar la ventana Inmediato de Visual Studio
Simplemente pegue esto (cambie
actual
su nombre de objeto obviamente):Debería imprimir el objeto en JSON
Debería poder copiarlo sobre la herramienta de texto textmechanic o notepad ++ y reemplazar las comillas escapadas (
\"
) con"
y las líneas nuevas (\r\n
) con un espacio vacío, luego elimine las comillas dobles ("
) desde el principio y el final y péguelo en jsbeautifier para que sea más legible.ACTUALIZAR al comentario de OP
Esto debería permitirle volcar cualquier objeto.
Espero que esto te ahorre algo de tiempo.
fuente
Console.Log(Newtonsoft.Json.JsonConvert.SerializeObject(actual));
? :) y sí, de hecho lo extrañé. Esta pregunta surge cuando busca en google.co.uk/…ServiceStack.Text tiene un método de extensión T.Dump () que hace exactamente esto, volca recursivamente todas las propiedades de cualquier tipo en un formato agradable y legible.
Ejemplo de uso:
y salida:
fuente
He didn't say fields
- dijo élentire objects
, que incluye campos. También mencionó la característica de Ventana Inmediata de Visual Studio como ejemplo de lo que quería lograr ( "Simplemente hacer un simple? objectname
me dará un 'volcado' del objeto muy bien formateado" ).? objectname
imprime todos los campos también.This has been immensely helpful - one of my most used extension methods to date
- No cuestiono que sea útil, solo que arroja objetos enteros.Int32
campo tiene unMaxValue
campo, que es unInt32
sí mismo ...), ese es un buen punto, pero no cambia el hecho de que los objetos, y ciertamente los enteros - también consisten en campos, no solo propiedades. Lo que es más (que no se refirió a que uno),? objectname
en lasImmediate Window
EOD campos de visualización - sin provocar un bucle infinito. Si se trata de mi voto negativo, puedo retirarlo (si me lo permite desbloqueándolo, claro). No estoy de acuerdo en principio de todos modos.Aquí hay una manera estúpidamente simple de escribir un objeto plano, bien formateado:
Lo que sucede es que el objeto se convierte primero en una representación interna JSON por
JObject.FromObject
, y luego se convierte en una cadena JSON porToString
. (Y, por supuesto, una cadena JSON es una muy buena representación de un objeto simple, especialmente porqueToString
incluirá nuevas líneas y sangrías). El "ToString" es, por supuesto, extraño (como se implica al usar+
para concatenar una cadena y un objeto), pero Me gusta especificarlo aquí.fuente
Puede usar la reflexión y recorrer todas las propiedades del objeto, luego obtener sus valores y guardarlos en el registro. El formato es realmente trivial (puede usar \ t para sangrar las propiedades de un objeto y sus valores):
fuente
Lo que me gusta hacer es anular ToString () para obtener una salida más útil más allá del nombre del tipo. Esto es útil en el depurador, puede ver la información que desea sobre un objeto sin necesidad de expandirlo.
fuente
Encontré una biblioteca llamada ObjectPrinter que permite volcar fácilmente objetos y colecciones en cadenas (y más). Hace exactamente lo que necesitaba.
fuente
La siguiente es otra versión que hace lo mismo (y maneja las propiedades anidadas), que creo que es más simple (no depende de bibliotecas externas y se puede modificar fácilmente para hacer otras cosas que no sean el registro):
fuente
Date
propiedad en tu objeto interior ... solo diciendo ...Puedes escribir tu propio método WriteLine
Úselo como ...
Para escribir una colección podemos usar:
El método puede parecer-
Usando
if, else if
y comprobando interfaces, atributos, tipo base, etc. y recursividad (ya que este es un método recursivo) de esta manera podemos lograr un objeto volcado, pero es tedioso con seguridad. Usar el volcador de objetos de la muestra LINQ de Microsoft le ahorraría tiempo.fuente
Basado en la respuesta de @engineforce, hice esta clase que estoy usando en un proyecto PCL de una Solución Xamarin:
fuente
Todas las rutas anteriores suponen que sus objetos son serializables a XML o JSON,
o debe implementar su propia solución.
Pero al final todavía llegas al punto en que tienes que resolver problemas como
Además inicie sesión desea más información:
Existe la mejor solución que resuelve todo esto y mucho más.
Use este paquete Nuget : Desharp .
Para todo tipo de aplicaciones, tanto aplicaciones web como de escritorio .
Vea que es la documentación de Desharp Github . Tiene muchas opciones de configuración .
Simplemente llame a cualquier parte:
hecho para cualquier cosa que pueda encontrar en el entorno .NET .
Creo que te ayudará.
fuente