Quelle est la meilleure méthode pour exporter des objets entiers dans un journal en C#?
Donc pour la visualisation d'un objet courant de l'état au moment de l'exécution, j'aime vraiment ce que Visual Studio Immédiate fenêtre me donne. Juste faire une simple
? objectname
Va me donner un bien formaté "décharger" de l'objet.
Est-il un moyen facile de le faire dans le code, afin que je puisse faire quelque chose de similaire lors de l'enregistrement?
- En fin de compte, j'ai utilisé T. Dump tout à fait un peu. C'est une jolie solution solide -- vous avez juste besoin d'être prudent de la récursivité.
- C'est une vieille question, mais aboutit à la partie supérieure de beaucoup de résultats de recherche. Pour les futurs lecteurs: Voir ce vs extension. A très bien fonctionné pour moi dans VS2015.
Vous devez vous connecter pour publier un commentaire.
Vous pourrait fonder quelque chose sur le ObjectDumper code fourni avec le Linq échantillons.
Ont également un oeil à la réponse de ce une question relative à la pour obtenir un échantillon.
DumpToString
etDump
àObject
classe. À portée de main.w3wp.exe
se bloque lorsque je tente de l'utiliserObjectDumper
commeRequest.DumpToString("aaa");
Pour un grand objet graphique, je seconde l'utilisation de Json, mais avec un peu différente de la stratégie. D'abord j'ai une classe statique qui est facile d'appeler et avec une méthode statique qui enveloppe le Json de conversion (note: pourrait en faire une méthode d'extension).
Puis dans votre
Immediate Window
,lookHere auto-apparaître dans la
Locals
fenêtre précédées d'un $ ou vous pouvez ajouter une montre à elle. Sur le côté droit de laValue
colonne dans l'inspecteur, il y a une loupe avec un menu curseur à côté d'elle. Choisissez le menu curseur et choisissez Json visualizer.Je suis à l'aide de Visual Studio 2013.
Newtonsoft.Json.JsonConvert.SerializeObject(sampleData, Formatting.Indented)
Je suis certain qu'il existe de meilleures façons de le faire, mais dans le passé j'ai utilisé une méthode similaire à l'exemple suivant pour sérialiser un objet en chaîne de caractères que je peux me connecter:
Vous verrez que la méthode pourrait également renvoyer à l'exception plutôt que l'objet sérialisé, de sorte que vous aurez envie de vous assurer que les objets que vous voulez vous connecter sont sérialisables.
Failed to access type 'System.__ComObject' failed
. Noob de c#, serait heureux d'aider.J'ai un T. Dump() la méthode d'extension qui fait exactement cela, de manière récursive les vidages de toutes les propriétés de n'importe quel type, dans un beau format lisible.
Exemple d'utilisation:
et de sortie:
He didn't say fields
- il ditentire objects
, qui comprend des champs. Il a également mentionné Visual Studio Immédiate de la fonctionnalité de la Fenêtre comme un exemple de ce que de ce qu'il voulait faire ("Juste faire une simple? objectname
va me donner un bien formaté "décharger" de l'objet").? objectname
imprime tous les domaines.This has been immensely helpful - one of my most used extension methods to date
- Je ne mets pas en question que c'est utile, seulement qu'elle exporte des objets entiers.Int32
champ a uneMaxValue
champ, qui est uneInt32
lui-même...), c'est un bon point, mais on ne change pas le fait que les objets - et certainement l'ensemble de ceux - consistent en des champs, aussi, pas seulement des propriétés. Quoi de plus (vous n'avez pas l'adresse de celle-là),? objectname
dans leImmediate Window
ne affichage des champs - sans déclencher une boucle infinie. Si c'est à propos de mon downvote, je peux la retirer (si vous me laissez en le déverrouillant, qui est). Je suis en désaccord, en principe, de toute façon.public class Nested { public Nested Child { get; set; } }
, vous pouvez le fairevar root = new Nested(); root.Child = root;
Sauf si je suis malentendu vous en quelque sorte sur celui-là.Vous pouvez utiliser Visual Studio Immédiate Fenêtre
Il suffit de coller ce (changement
actual
à votre nom d'objet évidemment):Elle doit imprimer un objet en JSON
Vous devriez être en mesure de le copier plus de textmechanic outil texte ou notepad++ et remplacer échappé citations (
\"
) avec"
et retours à la ligne (\r\n
) avec l'espace vide, puis retirer les guillemets doubles ("
) de début et de fin et le coller dans jsbeautifier pour le rendre plus lisible.Mise à JOUR de l'OP commentaire
cela devrait vous permettre de vider n'importe quel objet.
Espère que cela vous fait gagner du temps.
Ici est bêtement un moyen simple d'écrire un objet plat, bien mis en forme:
Ce qu'il se passe, c'est que l'objet est d'abord converti en JSON représentation interne par
JObject.FromObject
, et ensuite convertis en chaîne JSON parToString
. (Et bien sûr une chaîne JSON est une très belle représentation d'un objet simple, surtout depuisToString
comprendra des sauts de ligne et des tirets.) Le "ToString" est superflu (comme il est implicite en utilisant+
à la concaténation d'une chaîne et d'un objet), mais j'aime un peu le spécifier ici.Vous pouvez utiliser la réflexion et la boucle à travers toutes les propriétés de l'objet, puis obtenir leurs valeurs et de les enregistrer dans le journal. La mise en forme est vraiment triviales (on peut utiliser \t pour le retrait d'un de propriétés d'objets et de ses valeurs):
Ce que j'aime faire est primordial ToString() de sorte que j'ai plus de sortie utile au-delà du nom du type. C'est pratique dans le débogueur, vous pouvez voir les informations que vous voulez sur un objet sans avoir besoin de le développer.
J'ai trouvé une bibliothèque appelée ObjectPrinter qui permet facilement de vidage des objets et des collections à cordes (et plus). C'est exactement ce dont j'avais besoin.
- Ci est une autre version qui fait la même chose (et poignée de propriétés imbriquées), je pense que c'est plus simple (pas de dépendances sur les bibliothèques externes et peuvent être modifiés facilement à faire des choses autres que l'exploitation forestière):
Date
bien dans votre intérieur d'objets ... juste pour dire ...Vous pouvez écrire votre propre méthode WriteLine-
L'utiliser comme
À écrire une collection, nous pouvons utiliser-
La méthode peut ressembler à-
À l'aide de
if, else if
et la vérification des interfaces, des attributs, le type de base, etc. et la récursivité (car c'est une méthode récursive) de cette manière, nous pouvons atteindre un objet dumper, mais il est fastidieux pour vous. À l'aide de l'objet dumper de Microsoft LINQ Échantillon permettrait d'économiser votre temps.Basé sur @engineforce réponse, j'ai fait cette classe que j'utilise dans un PCL projet de Xamarin Solution: