2010-05-18 16 views

Respuesta

37
DataContractJsonSerializer serializer = 
    new DataContractJsonSerializer(typeof(YourObjectType)); 

YourObjectType yourObject = (YourObjectType)serializer.ReadObject(jsonStream); 

También podría utilizar el JavaScriptSerializer, pero DataContractJsonSerializer supuestamente es más capaz de manejar complejos tipos.

Curiosamente, JavaScriptSerializer fue una vez obsoleto (en 3.5) y luego resucitó debido a ASP.NET MVC (en 3.5 SP1). Eso definitivamente sería suficiente para sacudir mi confianza y llevarme a usar DataContractJsonSerializer ya que está duro cocido para WCF.

+0

Lo usaría sobre los serializadores construidos anteriormente en la vida útil del marco. – Will

+5

TIENE que agregar una referencia a esto primero luego 'usando System.Runtime.Serialization.Json;' – ppumkin

18

Creo que esto es lo que quiere:

JavaScriptSerializer JSS = new JavaScriptSerializer(); 
T obj = JSS.Deserialize<T>(String); 
+3

Necesito agregar una referencia a 'System.Web.Extensions' para ver esto –

+0

T necesita ser un tipo específico, ¿no es así? No puedo simplemente analizar una cadena aleatoria JSON. –

61

Simplemente use la biblioteca Json.NET. Le permite analizar cadenas formato JSON muy fácilmente:

JObject o = JObject.Parse(@" 
{ 
    ""something"":""value"", 
    ""jagged"": 
    { 
     ""someother"":""value2"" 
    } 
}"); 

string something = (string)o["something"]; 

Documentación: Parsing JSON Object using JObject.Parse

+0

Json.NET es una biblioteca profesional probada y comprobada que es mucho más flexible y eficiente. Muy recomendable. – Zyo

+2

Hasta donde puedo decir, esta es la única opción que permite el análisis genérico de tipos de objetos, las demás respuestas están vinculadas a un tipo de objeto determinado. –

+0

Gran solución. Aunque para mí funcionaba así 'JToken something = o [" something "];' – Edgar

2

Me hago eco de la biblioteca Json.NET, que puede transformar la respuesta JSON en un documento XML. Con el documento XML, puede consultar fácilmente con XPath y extraer los datos que necesita. Encuentro esto bastante útil.

5

Debe crear una estructura que represente las claves JSON (en caso de que lo sepa exactamente) y luego puede deserializar fácilmente la cadena JSON en su estructura. En mi examle He deserializado una respuesta del servidor de la nube de Google Mensaje:

class templateResponse 
{ 
    public String multicast_id; 
    public String success; 
    public String failure; 
    public String canonical_ids; 
    public Result[] results; 

    public class Result 
    { 
     public String message_id; 
     public String registration_id; 
     public String error; 
    }; 
} 

entrante JSON fue:

"\"multicast_id\":7400896764380883211,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1351777805148960%39895cf0f9fd7ecd\"}]}" 

lo tanto, utilizar

templateResponse result = new JavaScriptSerializer().Deserialize<templateResponse>(json); 

y serás deserializado result objeto

+0

El ejemplo JSON y la clase asociada fue útil, gracias. – Porco

Cuestiones relacionadas