2012-04-27 26 views
17

Mi aplicación está en Asp.Net MVC3 codificada en C#. Esto es lo que mi requisito es. Quiero un objeto que esté en el siguiente formato. Este objeto debería lograrse cuando deserializo la cadena Json.Deserializar cadena JSON a C# objeto

var obj1 = new { arg1=1,arg2=2 }; 

enter image description here

Después de usar el código de abajo:

string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}"; 
JavaScriptSerializer serializer1 = new JavaScriptSerializer(); 
object obje = serializer1.Deserialize<object>(str); 

El objeto lo que consigo es decir obje qué no actúa como obj1

enter image description here

Aquí, en esto Por ejemplo, mi cadena JSON es estática, pero en realidad la cadena JSON va a ser generada dinámicamente en tiempo de ejecución, por lo que no podré obtener Arg1 y Arg2 todo el tiempo.

+0

Esta pregunta ya existe: http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object – jbtule

+0

@jbtule gracias, intenté el código dado en el enlace de arriba. Después de editarlo, me dio un objeto similar pero todavía no puedo usarlo ya que puedo usar obj1 en mi código –

Respuesta

16

Creo que JavaScriptSerializer no crea un objeto dinámico.

por lo que debe definir la clase primera:

class MyObj { 
    public int arg1 {get;set;} 
    public int arg2 {get;set;} 
} 

Y deserializar que en lugar de object:

serializer.Deserialize<MyObj>(str); 

No testet, por favor trate.

7

creo que busca esto:

string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}"; 
JavaScriptSerializer serializer1 = new JavaScriptSerializer(); 
object obje = serializer1.Deserialize(str, obj1.GetType()); 
1

mismo problema que me ha pasado. Así que si el servicio devuelve la respuesta como una cadena JSON que tiene que deserializar la primera cadena, entonces usted será capaz de deserializar el tipo de objeto en forma adecuada:

string json= string.Empty; 
using (var streamReader = new StreamReader(response.GetResponseStream(), true)) 
     { 
      json= new JavaScriptSerializer().Deserialize<string>(streamReader.ReadToEnd()); 

     } 
//To deserialize to your object type... 
MyType myType; 
using (var memoryStream = new MemoryStream()) 
     { 
      byte[] jsonBytes = Encoding.UTF8.GetBytes(@json); 
      memoryStream.Write(jsonBytes, 0, jsonBytes.Length); 
      memoryStream.Seek(0, SeekOrigin.Begin); 
      using (var jsonReader = JsonReaderWriterFactory.CreateJsonReader(memoryStream, Encoding.UTF8,   XmlDictionaryReaderQuotas.Max, null)) 
      { 
       var serializer = new DataContractJsonSerializer(typeof(MyType)); 
       myType = (MyType)serializer.ReadObject(jsonReader); 

      } 
     } 

4 seguro de que funcionará ....;)

3

Esto puede ser útil:

var serializer = new JavaScriptSerializer(); 
dynamic jsonObject = serializer.Deserialize<dynamic>(json); 

Donde "json" es la cadena que contiene los valores JSON. A continuación, para recuperar los valores de la JSONObject puede usar

myProperty = Convert.MyPropertyType(jsonObject["myProperty"]); 

Cambiar a MyPropertyType del tipo adecuado (ToInt32, ToString, ToBoolean, etc).

0

Usar este código:

var result=JsonConvert.DeserializeObject<List<yourObj>>(jsonString); 
Cuestiones relacionadas