Konvertieren JSON-String in ein C#-Objekt

Fil Zjazel Romaeus Villegas 12 Oktober 2023
  1. Konvertieren einen JSON-String mit Newtonsoft.Json in ein C#-Objekt
  2. Konvertieren einen JSON-String mit JavaScriptSerializer in ein C#-Objekt
  3. Konvertieren einer JSON-Zeichenfolge in ein C#-Objektcodebeispiel
Konvertieren JSON-String in ein C#-Objekt

In diesem Tutorial wird gezeigt, wie Sie eine JSON-Zeichenfolge mit zwei verschiedenen Methoden in ein C#-Objekt konvertieren.

Die erste nutzt die Bibliothek Newtonsoft.Json, die zweite den JavaScriptSerializer. Beide Methoden sind ähnlich, verwenden jedoch eine leicht unterschiedliche Syntax und erfordern unterschiedliche Referenzen.

Konvertieren einen JSON-String mit Newtonsoft.Json in ein C#-Objekt

Die Bibliothek Newtonsoft.Json ist ein häufig verwendetes JSON-Framework für .NET. Diese Bibliothek kann nach der Installation des Pakets in Ihrer Lösung verwendet werden. Sie können die .NET-CLI mit dem folgenden Befehl verwenden, um das Paket zu installieren.

> dotnet add package Newtonsoft.Json --version 13.0.1

Eine JSON-Zeichenfolge kann in einen beliebigen Typ von C#-Objekt konvertiert werden, solange es sich um eine gültige JSON-Zeichenfolge für den Objekttyp handelt. Dies erfolgt durch Deserialisieren der Zeichenfolge, Umwandeln in den angegebenen Typ (T) und Bereitstellen der JSON-Eingabezeichenfolge.

JsonConvert.DeserializeObject<T>(json_string);

Konvertieren einen JSON-String mit JavaScriptSerializer in ein C#-Objekt

Eine ältere Möglichkeit, JSON-Strings in C#-Objekte umzuwandeln, ist JavaScriptSerializer. Sie ist zwar nicht so schnell wie die Newtonsoft.Json-Lösung, lässt sich aber dennoch gut nutzen. Um diese Methode zu verwenden, müssen Sie Ihrem Projekt einen Verweis auf System.Web.Extensions.dll hinzufügen.

Führen Sie die folgenden Schritte aus, um die Referenz hinzuzufügen.

  • Rechtsklick auf Referenzen
  • Klicken Sie auf Add Reference
  • Suchen Sie die Datei System.Web.Extensions.dll und klicken Sie auf OK.

Der JavaScriptSerializer funktioniert ähnlich wie die Newtonsoft.Json-Methode, indem er nur den JSON-String und den Typ benötigt, in den deserialisiert werden soll.

JavaScriptSerializer().Deserialize<T>(json_string)

Konvertieren einer JSON-Zeichenfolge in ein C#-Objektcodebeispiel

Das folgende Codebeispiel zeigt, wie Sie eine JSON-Zeichenfolge mithilfe der Funktionen JsonConvert.DeserializeObject<T> und JavaScriptSerializer in ein C#-Objekt eines beliebigen Typs konvertieren. In diesem Beispiel konvertieren wir Strings in ein Listenobjekt mit ganzen Zahlen ( List<Int32> ) und in eine benutzerdefinierte Klasse, die wir ebenfalls im Programm angegeben haben.

using Newtonsoft.Json;
using System.Data;
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace JSON_To_Object_Example {
  class Program {
    static void Main(string[] args) {
      // Declare the JSON Strings
      string list_str = "[1, 2, 3, 9, 8, 7]";
      string custom_class_str =
          "{ \"Name\":\"John Doe\",\"Age\":21,\"Birthday\":\"2000-01-01T00:00:00\"}";

      // ----- Newtonsoft Method -----
      // Deserialize the string by specifying the object type
      List<Int32> list_converted_ns = JsonConvert.DeserializeObject<List<Int32>>(list_str);

      // Print the contents of the newly converted List object to the Console.
      Console.WriteLine("Converted List - Newtonsoft: " + String.Join(", ", list_converted_ns) +
                        "\n");

      // The same can be done for any type of C# object, including custom classes. Just change the
      // specified Type.
      Custom_Class class_converted_ns =
          JsonConvert.DeserializeObject<Custom_Class>(custom_class_str);
      Console.WriteLine("Converted Class - Newtonsoft:");
      PrintPropreties(class_converted_ns);

      Console.WriteLine("\n\n");

      // ----- JavaScriptSerializer Method -----
      // Deserialize the string by specifying the object type
      List<Int32> list_converted_js = new JavaScriptSerializer().Deserialize<List<Int32>>(list_str);
      Console.WriteLine(
          "Converted List - JavaScriptSerializer: " + String.Join(", ", list_converted_js) + "\n");

      Custom_Class class_converted_js =
          new JavaScriptSerializer().Deserialize<Custom_Class>(custom_class_str);
      Console.WriteLine("Converted Class - JavaScriptSerializer:");
      PrintPropreties(class_converted_js);
      Console.ReadLine();
    }

    public class Custom_Class {
      // Custom Class created for the purposes of this tutorial
      public string Name { get; set; }
      public int Age { get; set; }
      public DateTime Birthday { get; set; }
    }

    public static void PrintPropreties(object obj) {
      // Uses the System.Component Model to read each property of a class and print its value
      foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(obj)) {
        string name = descriptor.Name;
        object value = descriptor.GetValue(obj);
        Console.WriteLine("{0}: {1}", name, value);
      }
    }
  }
}

Dieser Code gibt die durch Kommas verbundene Ganzzahlliste und alle Eigenschaften innerhalb der konvertierten benutzerdefinierten Klasse aus. Sie können beobachten, dass beide Methoden dieselbe Ausgabe erzeugen.

Ausgabe:

Converted List - Newtonsoft: 1, 2, 3, 9, 8, 7

Converted Class - Newtonsoft:
Name: John Doe
Age: 21
Birthday: 01/01/2000 12:00:00 am



Converted List - JavaScriptSerializer: 1, 2, 3, 9, 8, 7

Converted Class - JavaScriptSerializer:
Name: John Doe
Age: 21
Birthday: 01/01/2000 12:00:00 am

Verwandter Artikel - Csharp JSON

Verwandter Artikel - Csharp Object