© best_vector/Shutterstock.com
Kolumne: .NETversum

Beliebige .NET-Objekte mit einem Object Dumper ausgeben


Ein Objekt mit all seinen Daten auszugeben, ist eine Anforderung, der man in der Softwareentwicklung täglich begegnet. Zum Beispiel zur Protokollierung (Logging) oder auch für einfache Testausgaben während der Entwicklungsphase, wenn das GUI noch nicht fertig ist. Es verwundert, dass es in .NET keine eingebaute Funktion gibt, die alle Fields und Properties eines Objekts und ggf. auch der Unterobjekte als Zeichenkette liefert. Microsoft hatte einst Beispielcode für solch einen Object Dumper in einer früheren Version der „101 LINQ Samples“ [1] präsentiert, aber daraus nie ein echtes Produkt gemacht. Es gibt mehrere NuGet-Pakete zu dem Thema. Ein gutes, wenngleich für die Praxis noch nicht ganz hinreichendes Paket ist ObjectDumper.NET [2] von Thomas Galliker, dessen Quellcode man auf GitHub [3] findet. Die hier besprochene, von mir erweiterte Variante findet man ebenfalls auf GitHub [4]. Perspektivisch hoffe ich, dass das Original meine oder ähnliche Änderungen integriert.

Aufruf des Object Dumper

Die Bedienung von ObjectDumper.NET ist grundsätzlich sehr einfach: Man ruft ObjectDumper.Dump(objekt) auf und erhält das Objekt als Zeichenkette. Zu beachten ist, dass die Originalklasse ObjectDumper im globalen Namensraum liegt. Diese Entscheidung habe ich revidiert und für mich persönlich den Namensraum ITVisions gewählt. Folgende Datenstruktur sei gegeben in Listing 1 mit der Klasse Softwareentwickler, den Strukturen Knowhow und Firma sowie dem Aufzählungstyp KnowhowLevel. Das Mitglied Geburtsjahr ist bewusst kein Property, sondern ein Field, um auch das Verhalten von Fields zu testen.

Listing 1: Datenstruktur zum Test des Object Dumper

public enum KnowhowLevel { KeinWissen, Einsteiger, Fortgeschritten, Experte, TopExperte } public class Softwareentwickler { public string Name { get; set; } public Uri Website { get; set; } public int Geburtsjahr; public List<Knowhow> KnowhowSet { get; set; } = new List<Knowhow>(); public Firma Firma { get; set; } public override string ToString() { return Name + " *" + Geburtsjahr + ": " + Website; } } public struct Knowhow { public string Thema { get; set; } public KnowhowLevel KnowhowLevel { get; set; } } public struct Firma { public string Name { get; set; } public Softwareentwickler Inhaber { get; set; } public DateTime Gruendungsdatum { get; set; } public override string ToString() { return Name; } }

Zunächst soll ein Objekt ohne Details erzeugt und ausgegeben werden:

var obj = new Softwarearchitekt { Name = "Dr. Holger Sc...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang