Konvertieren JSON-String in ein C#-Objekt
-
Konvertieren einen JSON-String mit
Newtonsoft.Json
in ein C#-Objekt - Konvertieren einen JSON-String mit JavaScriptSerializer in ein C#-Objekt
- Konvertieren einer JSON-Zeichenfolge in ein C#-Objektcodebeispiel
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.
-
Navigieren Sie zum Lösungs-Explorer
-
Rechtsklick auf Referenzen
-
Klicken Sie auf
Add Reference
-
Klicken Sie links auf die Registerkarte
Assemblies
-
Suchen Sie die Datei
System.Web.Extensions.dll
und klicken Sie aufOK
.
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
- C# Parsen JSON
- C# Konvertieren des Objekts in eine JSON-Zeichenkette
- JSON in C# in Datei schreiben
- JSON mit C# deserialisieren
- Posten Sie JSON auf einem Server in C#