2010-07-18 25 views
56

¿.NET 4 viene con cualquier clase que serialice/deserialice datos JSON?¿.NET 4 tiene un serializador/deserializador JSON incorporado?

  • Sé que hay bibliotecas 3 ª parte, como JSON.NET, pero estoy en busca de algo integrado en .NET.

  • Encontré Data Contracts en MSDN, pero es para WCF, no para Winforms o WPF.

+4

JSON.Net está bien apoyado y parece que Microsoft tiene la intención de adoptarlo ellos mismos * "Nosotros en el equipo web incluiremos JSON.NET como el serializador JSON predeterminado en la API web cuando se lance, por lo que será agradable". * de http://www.hanselman.com/blog/ OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx – Liam

+0

¡Tenga en cuenta la biblioteca incorporada para el ** rendimiento ** de serialización de JSon en .Net! – Babak

+1

@Babak ¿a qué te refieres, cuidado? Por favor elabora. –

Respuesta

37

Puede usar la clase DataContractJsonSerializer en cualquier lugar que desee, es solo una clase .net y no está limitada a WCF. Más información sobre cómo usarlo here y here.

+0

Gracias, MSDN dijo que la clase DataContractJsonSerializer en Assembly: System.Runtime.Serialization (en System.Runtime.Serialization.dll). Sin embargo, VS2010 muestra un error, no se puede encontrar DataContractJsonSerializer. – Cheung

+0

@TatMing Eso es porque, IIRC, pre .Net V4 reside en System.ServiceModel.Web – Psytronic

+0

Encuentre eso ~ sobre el problema de Target Framework, vea: http://stackoverflow.com/questions/1825417/where-is-system -servicemodel-web-dll – Cheung

27

Hay la clase JavaScriptSerializer (aunque tendrá que hacer referencia al ensamblado System.Web.Extensions la clase funciona perfectamente bien en WinForms/aplicaciones WPF). Además, incluso si la clase DataContractJsonSerializer se diseñó para WCF, funciona bien en aplicaciones cliente.

+5

FYI: se puede encontrar una comparación entre JsonSerializer y JavaScriptSerializer [http://stackoverflow.com/questions/9301878/whats-the-difference-between-datacontractjsonserializer-and-javascriptserialize](aquí). – LosManos

+0

Además, JavaScriptSerializer está enterrado en el espacio de nombres System.Web.Script.Serialization.JavaScriptSerializer para quienes lo buscan. – Brain2000

0

Utilice esta clase genérica para serializar/deserializar JSON. Puede serializar fácil estructura de datos compleja como esta:

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

a cadena JSON y luego guardarlo en configuración de la aplicación o de lo contrario

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; 
    } 
}