Comment : sérialiser et désérialiser des données JSON
JSON (JavaScript Object Notation) est un format de codage 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 codé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.
Remarque : |
---|
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
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 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
Créez une instance du type
Person
.Person p = new Person(); p.name = "John"; p.age = 42;
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));
Utilisez la méthode WriteObject pour écrire les données JSON dans le flux.
ser.WriteObject(stream1, p);
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
Désérialisez les données codé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);
Affichez les résultats.
Console.Write("Deserialized back, got name="); Console.Write(p2.name); Console.Write(", age="); Console.WriteLine(p2.age);
Exemple
Remarque : |
---|
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