Konvertieren JSON-String in ein C#-Objekt

Konvertieren JSON-String in ein C#-Objekt

  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

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

  • C# Parsen JSON
  • C# Konvertieren des Objekts in eine JSON-Zeichenkette
  • Konvertieren einen String in ein JSON-Objekt in C#
  • Lesen einer JSON-Datei in C#
  • Verwandter Artikel - Csharp Object

  • XML zu Objekt deserialisieren in C#
  • Serialisieren eines Objekts zu XML in C#
  • Prüfen, ob ein Objekt Null ist in C#
  • Objekt löschen in C#