2012-04-27 15 views
17

La mia applicazione è in Asp.Net MVC3 codificata in C#. Questo è il mio requisito. Voglio un oggetto che è nel seguente formato. Questo oggetto dovrebbe essere raggiunto quando deserializzo la stringa Json.Deserializza stringa JSON nell'oggetto C#

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

enter image description here

Dopo usando il codice seguente:

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

Scopo cosa ottengo cioè obje fa non agisce come ogg1

enter image description here

Qui, in questo esempio la mia stringa JSON è statica, ma in realtà la stringa JSON verrà generata in fase di runtime dinamicamente, quindi non sarà possibile ottenere Arg1 e Arg2 tutto il tempo.

+0

esiste questa domanda già: http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object – jbtule

+0

@jbtule grazie, provato il codice fornito al link sopra. Dopo qualche modifica, mi ha dato un oggetto simile ma non riesco ancora a usarlo perché posso usare obj1 nel mio codice –

risposta

16

Penso che JavaScriptSerializer non crei un oggetto dinamico.

così si dovrebbe definire la classe prima:

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

e deserializzare che invece di object:

serializer.Deserialize<MyObj>(str); 

Non testet, prova.

7

Credo che alla ricerca di questo:

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

Stesso problema che mi è successo. Quindi, se il servizio restituisce la risposta come una stringa JSON è necessario deserializzare la stringa di prima, allora si sarà in grado di deserializzare il tipo di oggetto da esso correttamente:

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 sicuro che funzionerà ....;)

3

Ciò può essere utile:

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

Dove "json" è la stringa che contiene i valori JSON. Poi per recuperare i valori dalla JsonObject è possibile utilizzare

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

Modifica MyPropertyType al tipo corretto (ToInt32, ToString, ToBoolean, ecc).

0

di questo codice:

var result=JsonConvert.DeserializeObject<List<yourObj>>(jsonString); 
Problemi correlati