2010-07-18 8 views
56

.NET 4 ha una classe che serializza/deserializza i dati JSON?.NET 4 ha un serializzatore/deserializzatore JSON incorporato?

  • So che ci sono librerie di terze parti, come ad esempio JSON.NET, ma cerco qualcosa di costruito a destra in .NET.

  • Ho trovato Data Contracts su MSDN, ma è per WCF, non per Winforms o WPF.

+4

JSON.Net è ben supportato e sembra che Microsoft ha intenzione di adottare noi stessi * "Noi del team Web includeremo JSON.NET come Serializer JSON predefinito nell'API Web quando verrà rilasciato, quindi sarà piacevole." * da http://www.hanselman.com/blog/ OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx – Liam

+0

Tieni presente la libreria incorporata per la ** performance ** di serializzazione di JSon in .Net! – Babak

+1

@Babak cosa intendi con attenzione? Si prega di elaborare. –

risposta

37

È possibile utilizzare la classe DataContractJsonSerializer ovunque si desideri, è solo una classe .net e non è limitata a WCF. Maggiori informazioni su come usarlo here e here.

+0

Grazie, MSDN ha dichiarato la classe DataContractJsonSerializer in Assembly: System.Runtime.Serialization (in System.Runtime.Serialization.dll). Tuttavia, VS2010 mostra errore, non riesce a trovare DataContractJsonSerializer. – Cheung

+0

@TatMing Questo perché, IIRC, pre .Net V4 risiede in System.ServiceModel.Web – Psytronic

+0

Trova che ~ Riguardo al problema di Target Framework, vedere: http://stackoverflow.com/questions/1825417/where-is-system -servicemodel-web-dll – Cheung

27

C'è la classe JavaScriptSerializer (anche se sarà necessario fare riferimento all'assemblea System.Web.Extensions la classe funziona perfettamente bene in WinForms/applicazioni WPF). Inoltre, anche se la classe DataContractJsonSerializer è stata progettata per WCF, funziona perfettamente nelle applicazioni client.

+5

FYI: il confronto tra JsonSerializer e JavaScriptSerializer può essere trovato [http://stackoverflow.com/questions/9301878/whats-the-difference-between-datacontractjsonserializer-and-javascriptserialize](qui). – LosManos

+0

Inoltre, JavaScriptSerializer è nascosto nello spazio dei nomi System.Web.Script.Serialization.JavaScriptSerializer per coloro che lo cercano. – Brain2000

0

Utilizzare questa classe generica per serializzare/deserializzare JSON. È possibile serializzare semplice struttura dati complessa come questa:

Dictionary<string, Tuple<int, int[], bool, string>> 

a stringa JSON e poi salvarlo in impostazione dell'applicazione oppure

public class JsonSerializer 
{ 
    public string Serialize<T>(T aObject) where T : new() 
    { 
     T serializedObj = new T(); 
     MemoryStream ms = new MemoryStream(); 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); 
     ser.WriteObject(ms, serializedObj); 
     byte[] json = ms.ToArray(); 
     ms.Close(); 
     return Encoding.UTF8.GetString(json, 0, json.Length); 
    } 

    public T Deserialize<T>(string aJSON) where T : new() 
    { 
     T deserializedObj = new T(); 
     MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(aJSON)); 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(aJSON.GetType()); 
     deserializedObj = (T)ser.ReadObject(ms); 
     ms.Close(); 
     return deserializedObj; 
    } 
}