Portanto, para visualizar o estado atual de um objeto em tempo de execução, gosto muito do que a janela Imediata do Visual Studio me fornece. Apenas fazendo um simples
? objectname
Vai me dar um 'despejo' bem formatado do objeto.
Existe uma maneira fácil de fazer isso no código, para que eu possa fazer algo semelhante ao fazer logon?
Respostas:
Você pode basear algo no código ObjectDumper que acompanha as amostras do Linq .
Veja também a resposta desta pergunta relacionada para obter uma amostra.
fonte
DumpToString
eDump
para aObject
classe. Handy.w3wp.exe
trava quando tento usar oObjectDumper
tipo #Request.DumpToString("aaa");
Para um gráfico maior de objetos, eu recomendo o uso do Json, mas com uma estratégia ligeiramente diferente. Primeiro, tenho uma classe estática que é fácil de chamar e com um método estático que envolve a conversão do Json (nota: isso pode ser um método de extensão).
Então no seu
Immediate Window
,O lookHere será exibido automaticamente na
Locals
janela anexada com um $ ou você poderá adicionar um relógio a ele. No lado direito daValue
coluna no inspetor, há uma lente de aumento com um cursor pendente ao lado. Escolha o cursor suspenso e escolha o visualizador Json.Estou usando o Visual Studio 2013.
fonte
Newtonsoft.Json.JsonConvert.SerializeObject(sampleData, Formatting.Indented)
Estou certo de que existem maneiras melhores de fazer isso, mas no passado eu usei um método parecido com o seguinte para serializar um objeto em uma string que eu possa registrar:
Você verá que o método também pode retornar a exceção, e não o objeto serializado, portanto, você deve garantir que os objetos que deseja registrar sejam serializáveis.
fonte
Failed to access type 'System.__ComObject' failed
. Noob para c #, gostaria de receber ajuda.Você pode usar a janela imediata do Visual Studio
Basta colar isto (mude
actual
para o nome do seu objeto obviamente):Ele deve imprimir o objeto em JSON
Você deve poder copiá-lo sobre a ferramenta de texto mecânico ou o bloco de notas ++ e substituir aspas escapadas (
\"
) por"
e newlines (\r\n
) por espaço vazio, remover aspas duplas ("
) do início e final e colá-las no jsbeautifier para torná-las mais legíveis.ATUALIZAR no comentário do OP
isso deve permitir que você despeje qualquer objeto.
Espero que isso poupe algum tempo.
fonte
Console.Log(Newtonsoft.Json.JsonConvert.SerializeObject(actual));
? :) e sim, eu realmente senti falta. Esta questão surge quando você pesquisa google.co.uk/…O ServiceStack.Text possui um método de extensão T.Dump () que faz exatamente isso, despeja recursivamente todas as propriedades de qualquer tipo em um bom formato legível.
Exemplo de uso:
e saída:
fonte
He didn't say fields
- ele disseentire objects
, que inclui campos. Ele também mencionou o recurso Immediate Window do Visual Studio como um exemplo do que ele queria alcançar ( "Apenas fazer um simples? objectname
me dará um 'despejo' bem formatado do objeto" ).? objectname
imprime todos os campos também.This has been immensely helpful - one of my most used extension methods to date
- Não estou questionando se é útil, apenas que despeja objetos inteiros.Int32
campo tem umMaxValue
campo, que é umInt32
...), esse é um bom ponto, mas não altera o fato de que objetos - e certamente objetos inteiros - consistem em campos também, não apenas propriedades. O que é mais (você não fez endereço que um),? objectname
nosImmediate Window
faz campos de exibição - sem disparar um loop infinito. Se isso é sobre o meu voto negativo, posso retirá-lo (se você me permitir desbloqueá-lo). Eu discordo em princípio de qualquer maneira.Aqui está uma maneira estupidamente simples de escrever um objeto plano, bem formatado:
O que está acontecendo é que o objeto é primeiro convertido em uma representação interna JSON por
JObject.FromObject
e, em seguida, convertido em string JSON porToString
. (E, é claro, uma string JSON é uma representação muito boa de um objeto simples, especialmente porqueToString
incluirá novas linhas e recuos.) O "ToString" é obviamente estranho (como está implícito no uso+
para concaturar uma string e um objeto), mas Eu meio que gosto de especificar aqui.fonte
Você pode usar a reflexão e percorrer todas as propriedades do objeto, obter seus valores e salvá-los no log. A formatação é realmente trivial (você pode usar \ t para indentar as propriedades de um objeto e seus valores):
fonte
O que eu gosto de fazer é substituir o ToString () para obter uma saída mais útil além do nome do tipo. Isso é útil no depurador, você pode ver as informações que deseja sobre um objeto sem precisar expandi-lo.
fonte
Eu encontrei uma biblioteca chamada ObjectPrinter que permite despejar facilmente objetos e coleções em strings (e mais). Faz exatamente o que eu precisava.
fonte
A seguir, está outra versão que faz a mesma coisa (e lida com propriedades aninhadas), que eu acho que é mais simples (sem dependências de bibliotecas externas e pode ser modificada facilmente para fazer outras coisas além do log):
fonte
Date
propriedade em seu objeto interno ... apenas dizendo ...Você pode escrever seu próprio método WriteLine-
Use-o como-
Para escrever uma coleção, podemos usar-
O método pode parecer
Usando
if, else if
e verificando interfaces, atributos, tipo de base, etc. e recursão (como esse é um método recursivo), dessa maneira, podemos obter um descarregador de objetos, mas é tedioso, com certeza. Usar o descarregador de objetos do LINQ Sample da Microsoft economizaria seu tempo.fonte
Com base na resposta do @engineforce, fiz esta classe que estou usando em um projeto PCL de uma solução Xamarin:
fonte
Todos os caminhos acima assumem que seus objetos são serializáveis para XML ou JSON
ou você deve implementar sua própria solução.
Mas no final, você ainda chega ao ponto em que precisa resolver problemas como
Além disso, você deseja obter mais informações:
Existe a melhor solução que resolve tudo isso e muito mais.
Use este pacote Nuget: Desharp .
Para todos os tipos de aplicativos - aplicativos da Web e de desktop .
Veja a documentação do Desharp Github . Tem muitas opções de configuração .
Basta ligar para qualquer lugar:
fato , para qualquer coisa que você possa encontrar no ambiente .NET .
Eu acredito que isso vai ajudar.
fonte