Читать книгу Kochen mit Patrick - Patrick A. Lorenz - Страница 9

Für Faule wie mich: Code-Generierung

Оглавление

Zwar erlauben Bibliotheken wie JSON.NET den unstrukturierten Zugriff auf JSON-Daten mittels Dictionaries, wirklich interessant werden sie aber erst in Verbindung mit typisierten Klassen, die sich per Knopfdruck befüllen lassen. Wer mit einer externen Schnittstelle arbeitet, wird die dazu notwendigen Datenstrukturen in der Regel nicht vorliegen haben. Hier hilft der JSON C# Class Generator [2].

Das in Abbildung 1 gezeigte Programm besteht aus einem großen Eingabefeld und diversen Einstellungsmöglichkeiten. In das Feld wird ein möglichst aussagekräftiges Beispiel der zu verarbeitenden JSON-Struktur kopiert. Mit den Optionen lässt sich festlegen, ob die erzeugten Klassen Felder oder Eigenschaften verwenden sollen, welche Sichtbarkeit sie haben sollen, in welchem Namespace sie abgelegt werden und so weiter.


[Abb. 1] Der JSON C# Class Generator erzeugt aus einem JSON-Beispiel

eine passende Klassenstruktur.

Per Klick erzeugt das Programm eine passende Klassenstruktur entweder in C# oder Visual Basic. Die erkennbaren -Attribute gehören zu JSON.NET, das vom Programm explizit unterstützt wird. Sie dienen dem Mapping zwischen der JSON-Struktur und den Eigenschaften der Klasse. Im vorliegenden Fall ist das unnötig, lässt sich jedoch leider nicht abschalten.

namespace JSON.NET3 {

...

public class Issue {

[JsonProperty("Title")]

public string Title { get; set; }

[JsonProperty("Year")]

public int Year { get; set; }

[JsonProperty("Number")]

public int Number { get; set; }

[JsonProperty("PublicationDate")]

public string PublicationDate { get; set; }

[JsonProperty("Articles")]

public Article[] Articles { get; set; }

}

}

Als dritte Sprache neben C# und Visual Basic wird von JSON.NET übrigens TypeScript unterstützt:

module JSON.NET3 {

export interface Author {

FirstName: string;

LastName: string;

}

export interface Article {

Title: string;

PageNumber: number;

Authors: Author[];

}

export interface Issue {

Title: string;

Year: number;

Number: number;

PublicationDate: string;

Articles: Article[];

}

}

Als TypeScript-Fan finde ich das besonders spannend. Interessant ist das vor allem, um clientseitig aus TypeScript/ JavaScript typisiert auf ein externes API zugreifen zu können, im Zweifelsfall auch ganz ohne .NET. Für die kleine C#-Klasse zwischendurch gibt es unter [3] mit json2csharp eine Online-Version des Konverters (Abbildung 2).


[Abb. 2] C#-Datenstrukturen auf Knopfdruck.

Kochen mit Patrick

Подняться наверх