126 votes

Visual Studio : comment sérialiser un objet à partir du débogueur ?

J'essaie d'enquêter sur un bogue dans un crash dump (afin de ne pas modifier le code). J'ai un objet très compliqué (des milliers de lignes dans la représentation sérialisée) et son état est incohérent. Pour étudier son état, la vue du débogueur de Visual Studio est inutile. Mais l'objet a un contrat de données. J'aimerais le sérialiser et ensuite utiliser mon éditeur de texte préféré pour naviguer dans l'objet. Est-il possible de le faire à partir du débogueur ?

239voto

mcintyre321 Points 5393

Avec un peu de chance, vous avez déjà Json.Net dans votre domaine d'application. Dans ce cas, placez ceci dans votre fenêtre immédiate :

Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)

96voto

Alexey Points 1241

Il y a quelque temps, j'ai écrit cette ligne unique pour sérialiser un objet vers un fichier sur le disque. Copiez/collez-la dans votre fenêtre Immédiate, et remplacez obj (il est référencé deux fois) avec votre objet. Il va enregistrer un text.xml pour c:\temp modifiez-la à votre convenance.

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

Ne vous attendez pas à de la magie cependant, si l'objet ne peut pas être sérialisé, une exception sera levée.

39voto

Omar Elabd Points 916

Voici une extension de Visual Studio qui vous permettra de faire exactement cela :

https://visualstudiogallery.msdn.microsoft.com/c6a21c68-f815-4895-999f-cd0885d8774f

Vous pouvez produire des résultats en JSON, XML ou C#.

20voto

Łukasz Kurzyniec Points 355

Desde .NET Core 3.0 vous pouvez utiliser System.Text.Json :

System.Text.Json.JsonSerializer.Serialize(obj)

13voto

Chris Peacock Points 1361

Utilisez ceci dans la fenêtre "Immédiate" de Visual Studio, en remplaçant c:\directory\file.json avec le chemin complet du fichier dans lequel vous souhaitez écrire le JSON et myObject avec votre variable à sérialiser :

System.IO.File.WriteAllText(@"c:\directory\file.json", Newtonsoft.Json.JsonConvert.SerializeObject(myObject))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X