JSON-Daten als Strings in C#: @, $@ und $$ im Vergleich

Vor Ewigkeiten konnte man sich als VB Entwickler an XML Literals erfreuen. Zeichenketten Mehrzeilig und dann auch noch mit Variablen bestückbar.

JSON (JavaScript Object Notation) ist ein beliebtes Format zur Datenübertragung, und in C# gibt es mehrere Ansätze, um JSON-Daten als String zu erstellen. In diesem Artikel schauen wir uns die Verwendung von @, $@ und $$ an und diskutieren Vor- und Nachteile der einzelnen Methoden. Abschließend betrachten wir eine alternative dynamische Methode zur Erstellung von JSON.

Ein C# Entwickler kommt eher von der Objekt Seite und nutzt einer Serializer um einen JSON String zu erzeugen

   1:  using System.Text.Json;
   2:   
   3:  var person = new
   4:  {
   5:      name = "Max",
   6:      age = 30
   7:  };
   8:   
   9:  string json = JsonSerializer.Serialize(person);

 

Der einfache Weg: Verbatim-Strings mit @

Die Verbatim-Zeichenkette in C# wird mit einem @ vor dem String begonnen. Damit können Sonderzeichen wie Hochkommas direkt im String per "" verwendet werden, ohne sie zu escapen

   1:  string json = @"{
   2:    ""name"": ""Max",
   3:    ""age"": 30
   4:  }";

 

Erfordert doppelte Anführungszeichen ("") innerhalb des Strings und man kann nicht direkt mit Variablen arbeiten.

Interpolierte Strings mit $@

Interpolierte Strings kombinieren die Vorteile von Verbatim-Strings (@) mit Variableninjektion, die durch $ ermöglicht wird. Dabei ist die Reihen folge egal. Für das Esapen der geschweiften Klammer und des Hochkommas als Text müssen diese doppelt angegeben werden.
Die Variable oder der C# Ausdruck wird in einfachen Klammern gefasst und dann zur Laufzeit eingesetzt.

   1:  string name = "Max";
   2:  int age = 30;
   3:  string json = $@"{{
   4:    ""name"": ""{name}"",
   5:    ""age"": {age}
   6:  }}";

Ermöglicht das dynamische Einfügen von Variablen in JSON. Allerdings sind zusätzliche geschweifte Klammern ({{ und }}) notwendig, um JSON-Klammern korrekt darzustellen. Kann bei komplexen Strings unübersichtlich werden.

Raw String Literals mit $$ (C# 11+)

Seit C# 11 gibt es Raw String Literals, die es erleichtern, lange und komplexe Strings zu erstellen. Diese Literale eliminieren die Notwendigkeit, Anführungszeichen oder Sonderzeichen zu escapen.

   1:  string name = "Max";
   2:  int age = 30;
   3:  string json = $$"""
   4:  {
   5:    "name": "{name}",
   6:    "age": {age}
   7:  }
   8:  """;
Kommentare sind geschlossen