#157 - Serializzare e deserializzare in JSON con DataContractJsonSerializer
di Cristian Civera, in Windows Communication Foundation, 22 gennaio 2010
Archiviato in: .NET Framework, .NET Framework 3.0, .NET Framework 3.5, AJAX, ASP.NET, ASP.NET 3.5, ASP.NET AJAX, Javascript, jQuery, Windows Communication Foundation
Il web 2.0 ha portato alla ribalta tecnologie presenti ormai da molti anni, ma che non hanno mai trovato un impiego così massiccio come invece è avvenuto negli ultimi tempi. Tra queste rientra senza dubbio JSON (JavaScript Object Notation) le cui origini provengono da Javascript per la dichiarazione di oggetti, ma è diventato indipendente e utilizzato per lo scambio di informazioni, in formato testuale tra client e server.
In AJAX questo strumento viene ampiamente utilizzato e spesso occorre quindi produrre delle stringhe JSON per restituirle al client. Il motore di serializzazione introdotto insieme a WCF è già in grado, fin dalla versione 3.0, di convertire oggetti in XML o in binario, ma con la versione 3.5 sp1 è stato introdotto per questo scopo la classe DataContractJsonSerializer che, basandosi sullo stesso sistema di identificazione di proprietà e campi, permette di produrre JSON.
Ecco quindi un semplice utilizzo di questa classe per serializzare la classe Product:
class Program { static void Main(string[] args) { // Creo l'entità da serializzare Product p = new Product { ID = 1, Name = "test", }; using (MemoryStream stream = new MemoryStream()) { // Serializzatore JSON DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Product)); serializer.WriteObject(stream, p); stream.Position = 0; // Converto lo stream in stringa string json = Encoding.Default.GetString(stream.GetBuffer()); Console.WriteLine(json); } } } [DataContract()] public class Product { public int ID { get; set; } [DataMember()] public string Name { get; set; } }
Eseguendo il codice ciò che si ottiene è {"Name":"test"}. Come per il normale serializzatore DataContractSerializer, anche per JSON è possibile utilizzare gli attributi DataContract e DataMember per indicare quali classi e proprietà serializzare (se omesso tutti i membri pubblici sono serializzabili).
Approfondimenti
-
#109 - Effettuare il Binding in WPF di una query Entity Framework
-
Rilasciata una nuova versione dell'AjaxControlToolkit
-
#167 - Eseguire un'applicazione per il .NET Framework con privilegi amministrativi
-
MetadataDiffViewer: differenze tra i framework
-
Finalmente disponibile ASP.NET MVC 2 in RTM
-
.NET Framework 4.0 beta 2: Visual Studio 2010
-
#999 - Mostrare una finestra di dialogo popolata tramite AJAX utilizzando jQuery
-
Real Code Day 4.0 anche in streaming!
-
Costruire una chat per Silverlight con il PollingDuplexHttpBinding
-
#110 - Ricercare un oggetto prima in memoria e poi sul database con Entity Framework
-
#115 - Creare file ZIP con System.IO.Packaging

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.