Freigeben über


Vorgehensweise: Serialisieren und Deserialisieren von JSON-Daten

JSON (JavaScript Object Notation) ist ein effizientes Datencodierungsformat, das einen schnellen Austausch kleiner Datenmengen zwischen Clientbrowsern und AJAX-aktivierten Webdiensten ermöglicht.

In diesem Thema wird gezeigt, wie .NET-Typobjekte mit DataContractJsonSerializer in JSON-codierte Daten serialisiert und Daten im JSON-Format anschließend wieder in Instanzen von .NET-Typen deserialisiert werden. Dieses Beispiel verwendet einen Datenvertrag, um die Serialisierung und die Deserialisierung eines benutzerdefinierten Person-Typs zu veranschaulichen.

In der Regel wird die JSON-Serialisierung und -Deserialisierung automatisch von Windows Communication Foundation (WCF) vorgenommen, wenn Sie Datenvertragstypen in Dienstvorgängen verwenden, die über AJAX-aktivierte Endpunkte verfügbar gemacht werden. In manchen Fällen müssen Sie möglicherweise direkt mit JSON-Daten arbeiten. Dieses Szenario wird in diesem Thema veranschaulicht.

Bb412179.note(de-de,VS.100).gifHinweis:
Wenn bei der Serialisierung einer ausgehenden Antwort auf dem Server ein Fehler auftritt oder wenn der Antwortvorgang aus einem anderen Grund eine Ausnahme auslöst, wird möglicherweise kein Fehler an den Client zurückgegeben.

Dieses Beispiel basiert auf dem JSON-Serialisierung-Beispiel.

So definieren Sie den Datenvertrag für eine Person

  1. Definieren Sie den Datenvertrag für Person, indem Sie das DataContractAttribute an die Klasse und das DataMemberAttribute-Attribut an die zu serialisierenden Member anhängen. Weitere Informationen über über Datenverträge finden Sie unter Entwerfen von Dienstverträgen.

    [DataContract]
        internal class Person
        {
            [DataMember]
            internal string name;
    
            [DataMember]
            internal int age;
        }
    

So serialisieren Sie eine Instanz des Person-Typs in JSON

  1. Erstellen Sie eine Instanz des Person-Typs.

    Person p = new Person();
    p.name = "John";
    p.age = 42;
    
  2. Serialisieren Sie das Person-Objekt mit DataContractJsonSerializer in einen Speicherstream.

    MemoryStream stream1 = new MemoryStream();
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
    
  3. Verwenden Sie die WriteObject-Methode, um JSON-Daten in den Stream zu schreiben.

    ser.WriteObject(stream1, p);
    
  4. Zeigen Sie die JSON-Ausgabe an.

    stream1.Position = 0;
    StreamReader sr = new StreamReader(stream1);
    Console.Write("JSON form of Person object: ");
    Console.WriteLine(sr.ReadToEnd());
    

So deserialisieren Sie eine Instanz des Person-Typs von JSON

  1. Deserialisieren Sie die JSON-codierten Daten mit der ReadObject-Methode des DataContractJsonSerializer in eine neue Instanz von Person.

    stream1.Position = 0;
    Person p2 = (Person)ser.ReadObject(stream1);
    
  2. Zeigen Sie die Ergebnisse an.

    Console.Write("Deserialized back, got name=");
    Console.Write(p2.name);
    Console.Write(", age=");
    Console.WriteLine(p2.age);
    

Beispiel

Bb412179.note(de-de,VS.100).gifHinweis:
Wie im folgenden Beispiel gezeigt, löst der JSON-Serialisierer eine Serialisierungsausnahme für Datenverträge aus, die mehrere Member mit demselben Namen besitzen:

[DataContract]
public class TestDuplicateDataBase
{
    [DataMember]
    public int field1 = 123;
}
[DataContract]
public class TestDuplicateDataDerived : TestDuplicateDataBase
{
    [DataMember]
    public new int field1 = 999;
}

Siehe auch

Konzepte

Eigenständige JSON-Serialisierung.
Unterstützung für JSON und andere Datenübertragungsformate