Comment : sérialiser et désérialiser des données JSON

JSON (JavaScript Object Notation) est un format d'encodage de données efficace qui permet l'échange rapide de petites quantités de données entre les navigateurs clients et les services Web compatibles AJAX.

Cette rubrique décrit comment sérialiser des objets de type .NET dans des données encodées JSON et ensuite désérialiser les données au format JSON en instances de type .NET à l'aide de DataContractJsonSerializer. Cet exemple utilise un contrat de données pour montrer la sérialisation et la désérialisation d'un type Person défini par l'utilisateur.

Normalement, la sérialisation et la désérialisation JSON sont contrôlées automatiquement par Windows Communication Foundation (WCF) lorsque vous utilisez les types de contrats de données dans les opérations de service exposées sur des points de terminaison compatibles AJAX. Toutefois, dans certains cas, vous devez travailler directement avec les données JSON ; c'est le scénario abordé dans cette rubrique.

Bb412179.note(fr-fr,VS.100).gifRemarque :
Si une erreur se produit pendant la sérialisation d'une réponse sortante sur le serveur ou si l'opération de réponse lève une quelconque exception, il se peut qu'elle ne soit pas retournée au client sous forme d'erreur.

Cette rubrique utilise l'exemple JSON Serialization.

Pour définir le contrat de données pour une personne

  1. Définissez le contrat de données pour Person en joignant DataContractAttribute à la classe et l'attribut DataMemberAttribute aux membres que vous souhaitez sérialiser. Pour plus d'informations sur le sujet suivant les contrats de données, consultez Conception de contrats de service.

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

Pour sérialiser une instance de type Person à JSON

  1. Créez une instance du type Person.

    Person p = new Person();
    p.name = "John";
    p.age = 42;
    
  2. Sérialisez l'objet Person à un flux de données de mémoire à l'aide de DataContractJsonSerializer.

    MemoryStream stream1 = new MemoryStream();
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
    
  3. Utilisez la méthode WriteObject pour écrire les données JSON dans le flux.

    ser.WriteObject(stream1, p);
    
  4. Affichez la sortie JSON.

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

Pour désérialiser une instance de type Person depuis JSON

  1. Désérialisez les données encodées JSON dans une nouvelle instance de Person à l'aide de la méthode ReadObject de DataContractJsonSerializer.

    stream1.Position = 0;
    Person p2 = (Person)ser.ReadObject(stream1);
    
  2. Affichez les résultats.

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

Exemple

Bb412179.note(fr-fr,VS.100).gifRemarque :
Le sérialiseur JSON lève une exception de sérialisation pour les contrats de données dont plusieurs membres portent le même nom, comme illustré dans l'exemple de code suivant.

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

Voir aussi

Concepts

Sérialisation JSON autonome
Prise en charge du format JSON et d'autres formats de transfert de données