Kochen mit Patrick: Kochen und Programmieren - Hand in Hand
()
Über dieses E-Book
Ähnlich wie Kochen mit Patrick
Ähnliche E-Books
MQL: Eine hierarchische Abfragesprache mit TypeScript erstellen Bewertung: 0 von 5 Sternen0 BewertungenNoSQL Einführung: CouchDB, MongoDB und Regis Bewertung: 0 von 5 Sternen0 BewertungenForms over Data mit Knockout.js: Die freie MVVM-JavaScript-Bibliothek im Praxiseinsatz Bewertung: 0 von 5 Sternen0 BewertungenJavaScript für Java-Entwickler Bewertung: 0 von 5 Sternen0 BewertungenDer Java-Profi: Persistenzlösungen und REST-Services: Datenaustauschformate, Datenbankentwicklung und verteilte Anwendungen Bewertung: 0 von 5 Sternen0 BewertungenBigData mit JavaScript visualisieren: D3.js für die Darstellung großer Datenmengen einsetzen Bewertung: 0 von 5 Sternen0 BewertungenJavaScript und TypeScript für C#-Entwickler Bewertung: 0 von 5 Sternen0 BewertungenDurchstarten mit React: Web-Apps einfach und modular entwickeln Bewertung: 0 von 5 Sternen0 BewertungenReact Native: Native Apps parallel für Android und iOS entwickeln Bewertung: 0 von 5 Sternen0 BewertungenOpenLaszlo: schnell + kompakt Bewertung: 0 von 5 Sternen0 BewertungenWeb-Applikationen entwickeln mit NoSQL: Das Buch für Datenbank-Einsteiger und Profis! Bewertung: 0 von 5 Sternen0 BewertungenTestgetriebene Entwicklung mit JavaScript: Das Handbuch für den professionellen Programmierer Bewertung: 0 von 5 Sternen0 BewertungenModerne Webanwendungen mit AngularJS Bewertung: 0 von 5 Sternen0 BewertungenSharePoint Kompendium - Bd. 15 Bewertung: 0 von 5 Sternen0 BewertungenJavaScript objektorientiert: Verständlicher, flexibler und effizienter programmieren Bewertung: 0 von 5 Sternen0 BewertungenSharePoint Kompendium - Bd. 16 Bewertung: 0 von 5 Sternen0 BewertungenBig Data: Datenverarbeitung basierend auf MOM und SQL Bewertung: 0 von 5 Sternen0 BewertungenAufsetzen, Testen und Betrieb einer Android-App Bewertung: 0 von 5 Sternen0 BewertungenProgrammieren in TypeScript: Skalierbare JavaScript-Applikationen entwickeln Bewertung: 0 von 5 Sternen0 BewertungenDie Welt der VBA-Objekte: Was integrierte Anwendungen leisten können Bewertung: 0 von 5 Sternen0 BewertungenREST und HATEOAS Bewertung: 0 von 5 Sternen0 BewertungenClojure: Funktionale Programmierung für die JVM Bewertung: 0 von 5 Sternen0 BewertungenBootstrap kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenSpock, Geb und Selenium: Testframeworks unter die Lupe genommen Bewertung: 0 von 5 Sternen0 BewertungenModerne Datenzugriffslösungen mit Entity Framework 6 Bewertung: 0 von 5 Sternen0 BewertungenDynamic Proxies: Effizient programmieren Bewertung: 0 von 5 Sternen0 BewertungenJavaScript für .NET-Entwickler Bewertung: 0 von 5 Sternen0 BewertungenApache Kafka Bewertung: 0 von 5 Sternen0 BewertungenCognitive Services Bewertung: 0 von 5 Sternen0 Bewertungen
Lehrmethoden & Materialien für Sie
Learn German With Stories: Café In Berlin – 10 Short Stories For Beginners Bewertung: 4 von 5 Sternen4/5Read & Learn German - Deutsch lernen - Part 2: Wohnen Bewertung: 4 von 5 Sternen4/5Read & Learn German - Deutsch lernen - Part 1: Einkaufen Bewertung: 5 von 5 Sternen5/5Read & Learn German - Deutsch lernen - Part 3: Arbeiten Bewertung: 5 von 5 Sternen5/5Crashkurs Rechtschreibung: Ein Übungsbuch für Ausbildung und Beruf. Mit zahlreichen Übungen und Abschlusstest zur Selbstkontrolle Bewertung: 0 von 5 Sternen0 BewertungenLexikon der Symbole und Archetypen für die Traumdeutung Bewertung: 5 von 5 Sternen5/5101 Conversations in Simple German: 101 Conversations | German Edition, #1 Bewertung: 4 von 5 Sternen4/5Spracherwerb und Sprachenlernen Bewertung: 0 von 5 Sternen0 BewertungenClimate Change in Simple German: Topics that Matter: German Edition Bewertung: 0 von 5 Sternen0 BewertungenGerman Reader, Level 4 Intermediate (B2): Mein Leben in Wien - 1. Teil: German Reader, #1 Bewertung: 5 von 5 Sternen5/575 einfache Spiele ohne viel Vorbereitung für den Deutschkurs: Deutsch als Fremdsprache, #1 Bewertung: 0 von 5 Sternen0 BewertungenDeutsch B2 - Übungen zur Prüfungsvorbereitung: Leseverstehen - Lückentexte - Hörverstehen - schriftlicher Ausdruck Bewertung: 0 von 5 Sternen0 BewertungenGrammatik 1./2. Klasse Bewertung: 0 von 5 Sternen0 BewertungenGerman Simple Sentences 1, German/English, Level 1 - Beginners: A1 (Textbook): German Reader, #3 Bewertung: 0 von 5 Sternen0 BewertungenMnemotechnik - Schnelleinstieg: Jetzt ist Schluss mit der Vergesserei Bewertung: 0 von 5 Sternen0 BewertungenSprachen Lernen Kreativ Bewertung: 2 von 5 Sternen2/5Spanisch - Lerne Spanisch Anders Paralleler Text Lesen (Vol 2): 10 Geschichten in Spanisch und Deutsch für Spanisch lernen Bewertung: 0 von 5 Sternen0 BewertungenAbi genial Englisch: Das Schnell-Merk-System Bewertung: 0 von 5 Sternen0 BewertungenMein Übungsheft Rechtschreiben - 4. Klasse Bewertung: 0 von 5 Sternen0 BewertungenAufsatz Deutsch 4. Klasse Bewertung: 0 von 5 Sternen0 BewertungenErklärs mir, als wäre ich 5: Komplizierte Sachverhalte einfach dargestellt. Allgemeinwissen. Verständliche Antworten auf wichtige Fragen. SPIEGEL-Bestseller Bewertung: 0 von 5 Sternen0 BewertungenGrammatik 3. Klasse Bewertung: 5 von 5 Sternen5/5Französisch Lernen - Paralleltext - Einfache, unterhaltsame Geschichten (Deutsch - Französisch) Bilingual Bewertung: 0 von 5 Sternen0 BewertungenGerman Reader, Level 1 Beginners (A1): Mein wunderbares Lokal: German Reader, #2 Bewertung: 0 von 5 Sternen0 BewertungenDie Physiker - Lektürehilfe und Interpretationshilfe. Interpretationen und Vorbereitungen für den Deutschunterricht. Bewertung: 5 von 5 Sternen5/5
Verwandte Kategorien
Rezensionen für Kochen mit Patrick
0 Bewertungen0 Rezensionen
Buchvorschau
Kochen mit Patrick - Patrick A. Lorenz
Kochen mit Patrick: JSON und .NET
Das Borne Sequel
Patrick_8868highres_klein.tif
AUTOR
Patrick A. Lorenz ist Geschäftsführer der PGK GmbH, eines auf .NET spezialisierten Technologiedienstleisters, der das .NET-basierte CMS QualiSite anbietet. Daneben ist er als Autor und Coach tätig. In seiner Freizeit ist Patrick Hobbykoch. Sie erreichen ihn unter www.pgk.de, lorenz@pgk.de und www.facebook.com/Kochen.mit.Patrick.
Im vorangegangenen Heft habe ich an dieser Stelle über JSON, die JavaScript Object Notation, berichtet. Es ging um die Grundlagen, den Aufbau von JSON, die Unterschiede zu XML und die Anwendung in der Praxis. Als Fazit ließ sich unter anderem festhalten, dass JSON in klassischen Web-Szenarien XML längst abgelöst hat. Feststellen ließ sich aber auch, dass der Einsatz nicht aufs Web begrenzt ist. Zudem kann nicht nur JavaScript mit JSON umgehen. Eher am Rande habe ich die implizite Serialisierung durch das ASP.NET Web API demonstriert. Microsoft setzt hier auf die verbreitete Open-Source-Bibliothek JSON.NET. Nach dem positiven Feedback möchte ich in diesem Monat mit Ihnen einen zweiten Blick auf diese und andere Komponenten werfen.
Meet JSON.NET
Die Aufgaben von JSON.NET [1] sind einfach umrissen, denn es sind nur zwei an der Zahl:
die Serialisierung von .NET-Daten in JSON-Strukturen und
das Deserialisieren in umgekehrter Richtung.
Diese Möglichkeiten gibt es in der .NET Framework Class Library zwar von Haus aus schon, doch JSON.NET will es schneller, komfortabler, flexibler oder schlicht gesagt besser machen.
JSON.NET kann ab .NET Version 2.0 genutzt werden, steht für Windows Phone und Windows 8 zur Verfügung und lässt sich über Mono auch auf anderen Plattformen einsetzen, etwa auf mobilen iOS- oder Android-Geräten. In Visual Studio führt der schnellste Weg zu JSON.NET über NuGet. Mit der folgenden Zeile in der Package Manager Konsole wird die Bibliothek heruntergeladen und in Ihr Projekt eingebunden:
PM> Install-Package Newtonsoft.Json
Anschließend können Sie einfache .NET-Datenstrukturen mit nur einem Aufruf in JSON umwandeln:
var person = new Person {
ID = 1,
FirstName = Theodor
,
LastName = Heuss
};
var json = JsonConvert.SerializeObject(person);
Debug.WriteLine(json);
Das Ergebnis sieht so aus:
>{ID
:1,FirstName
:Theodor
,LastName
:Heuss
}
Für bessere Lesbarkeit unterstützt JSON.NET auch eine formatierte Serialisierung, die die Objekthierarchie mittels Einrückung sichtbar macht:
var json = JsonConvert.SerializeObject( person, Formatting.Indented);
Leserlich formatiert zeigt sich die Datenstruktur dann wie folgt:
{
ID
: 1,
FirstName
: Theodor
,
LastName
: Heuss
}
Umgekehrt geht es auch: JSON.NET kann aus einer JSON-Zeichenkette ein .NET-Objekt deserialisieren:
var deserializedPerson = JsonConvert.DeserializeObject
Steht eine passende Klasse nicht zur Verfügung, kann diese als dynamischer Typ als eine Art Prototyp übergeben werden. Das sieht dann so aus:
var deserializedAnonymousType = JsonConvert.DeserializeAnonymousType( json, new {
FirstName = string.Empty,
LastName = string.Empty
});
Debug.WriteLine( deserializedAnonymousType.LastName);
Offiziell unterstützt JSON.NET darüber hinaus dynamische Objekte. In Verbindung mit dem Schlüsselwort kann ohne explizite Übergabe eines Datentyps typisiert auf Eigenschaften zugegriffen werden:
dynamic deserializedDynamicType = JsonConvert.DeserializeObject
json);
Debug.WriteLine( deserializedDynamicType.LastName);
Wenngleich formal unterstützt, funktioniert dies leider nicht, sondern wird mit einem Laufzeitfehler quittiert. Zumindest bei mir. Ich habe mich in der Vergangenheit schon einmal mehrere Stunden mit diesem Problem gequält; damals wie heute völlig erfolglos. Vielleicht haben Sie mehr Glück?
JSON.NET für die schwierigen Fälle
JSON.NET ist nicht auf einfache Strukturen begrenzt. Es lassen sich Arrays, Dictionaries und komplexe Objektbäume damit umwandeln. Im folgenden Beispiel werden drei Klassen in Collections ineinander verschachtelt. Abgebildet wird ein einfaches Artikelarchiv aus Ausgaben mit Artikeln und Autoren:
var issues = new List
new Issue {
Title = dotnetpro
,
Year = 2013,
Number = 12,
PublicationDate = new DateTime(2013, 11, 21),
Articles = new List
new Article {
Title = Kochen mit Patrick
,
PageNumber = 123,
Authors = new List
new Author {
FirstName = Patrick A.
,
LastName = Lorenz
}
}
}
}
}
};
Mit den weiter oben gezeigten Aufrufen produziert JSON.NET aus der Struktur ein ansehnliches Stück JSON:
[{
Title
: dotnetpro
,
Year
: 2013,
Number
: 12,
PublicationDate
: 2013-11-21T00:00:00
,
Articles
: [
{
Title
: Kochen mit Patrick
,
PageNumber
: 123,
Authors
: [
{
FirstName
: Patrick A.
,
LastName
: Lorenz
}
]
}
]
}]
Offiziell unterstützt JSON keine Datumswerte. Hier spielt JSON.NET seine Stärken aus: Die Bibliothek bietet eine ausgesprochen umfangreiche Unterstützung von JSON mit sehr vielen Details und Spezialfällen. Datumswerte in verschiedenen gängigen Interpretationen gehören da schon zu den Basics.
JSON versus XML
Obwohl oder gerade weil man JSON und XML in manchen Anwendungsbereichen als Konkurrenten betrachten darf, bietet JSON.NET eine XML-Unterstützung. Diese erlaubt mit gewissen Einschränkungen die Konvertierung von JSON nach XML:
var issueJson =
JsonConvert.SerializeObject(
issues[0]);
var xml =
JsonConvert.DeserializeXmlNode(
issueJson, issue
);
Debug.WriteLine(xml.OuterXml);
Die Zeilen basieren auf dem vorherigen Beispiel und produzieren das folgende XML:
Der Prozess lässt sich auch umkehren, allerdings mit Reibungsverlusten.
Im konkreten Beispiel geht die Abbildung der Unterstrukturen als Array verloren, im Vergleich zum JSON weiter oben fehlen die eckigen Klammern. Folglich lässt sich das rückermittelte JSON nicht mehr mit in das Ursprungsobjekt deserialisieren.
{ Title
: dotnetpro
,
Year
: 2013
,
Number
: 12
,
PublicationDate
: 2013-11-21T00:00:0
,
Articles
: {
Title
: Kochen mit Patrick
,
PageNumber
: 123
,
Authors
: {
FirstName
: Patrick A.
,
LastName
: Lorenz
}
}
}
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.
Abb01_Kochen XCIV.tif[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