Procedura: serializzare e deserializzare dati JSON
JSON (JavaScript Object Notation) è un efficiente formato di codifica dati che consente scambi rapidi di piccole quantità di dati tra browser client e servizi Web compatibili con AJAX.
In questo argomento viene descritto come serializzare oggetti di tipo .NET in dati con codifica JSON e quindi come deserializzare i dati in formato JSON in istanze di tipi .NET utilizzando DataContractJsonSerializer. In questo esempio viene utilizzato un contratto dati per illustrare la serializzazione e la deserializzazione di un tipo Person
definito dall'utente.
In genere, la serializzazione e la deserializzazione JSON vengono gestite automaticamente da Windows Communication Foundation (WCF) quando si utilizzano tipi di contratto dati nelle operazioni del servizio esposte su endpoint compatibili con AJAX. Tuttavia, in alcuni casi potrebbe essere necessario utilizzare direttamente dati JSON, come nel caso dello scenario descritto in questo argomento.
Nota
Se si verifica un errore durante la serializzazione di una risposta in uscita nel server o se l'operazione di risposta genera un'eccezione per qualche altro motivo, è possibile che l'errore non venga restituito al client.
Questo argomento si basa sull'esempio JSON Serialization.
Per definire il contratto dati per Person
Definire il contratto dati per
Person
collegando DataContractAttribute alla classe e l'attributo DataMemberAttribute ai membri da serializzare. Per ulteriori informazioni sui contratti dati, vedere Progettazione dei contratti di servizio.[DataContract] internal class Person { [DataMember] internal string name; [DataMember] internal int age; }
Per serializzare un'istanza di tipo Person in JSON
Creare un'istanza del tipo
Person
.Person p = new Person(); p.name = "John"; p.age = 42;
Serializzare l'oggetto
Person
in un flusso di memoria utilizzando DataContractJsonSerializer.MemoryStream stream1 = new MemoryStream(); DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
Utilizzare il metodo WriteObject per scrivere dati JSON nel flusso.
ser.WriteObject(stream1, p);
Visualizzare l'output JSON.
stream1.Position = 0; StreamReader sr = new StreamReader(stream1); Console.Write("JSON form of Person object: "); Console.WriteLine(sr.ReadToEnd());
Per deserializzare un'istanza di tipo Person da JSON
Deserializzare i dati con codifica JSON in una nuova istanza di
Person
utilizzando il metodo ReadObject di DataContractJsonSerializer.stream1.Position = 0; Person p2 = (Person)ser.ReadObject(stream1);
Visualizzare i risultati.
Console.Write("Deserialized back, got name="); Console.Write(p2.name); Console.Write(", age="); Console.WriteLine(p2.age);
Esempio
Nota
Il serializzatore JSON genera un'eccezione di serializzazione per i contratti dati che dispongono di più membri con lo stesso nome, come illustrato nel codice di esempio seguente.
[DataContract]
public class TestDuplicateDataBase
{
[DataMember]
public int field1 = 123;
}
[DataContract]
public class TestDuplicateDataDerived : TestDuplicateDataBase
{
[DataMember]
public new int field1 = 999;
}
Vedere anche
Concetti
Serializzazione JSON autonoma
Supporto per JSON e altri formati di trasferimento dati