2012-04-27 13 views
17

Meine Anwendung ist in Asp.Net MVC3 in C# codiert. Das ist meine Anforderung. Ich möchte ein Objekt, das im folgenden Format ist. Dieses Objekt sollte erreicht werden, wenn ich die JSON-Zeichenfolge deserialize.Deserialize JSON Zeichenfolge zu C# Objekt

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

enter image description here

Nach dem folgenden Code:

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

Das Objekt, was ich also obje bekommen nicht wirkt als obj1

enter image description here

Hier in diesem Beispiel meine JSON-Zeichenkette ist statisch, aber tatsächlich wird JSON-Zeichenkette dynamisch erzeugte Laufzeit sein, also werde ich Arg1 und Arg2 die ganze Zeit nicht erhalten.

+0

Diese Frage ist bereits vorhanden: http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object – jbtule

+0

@jbtule Dank, i versuchte den Code, der oben angegeben wurde. Nach einigen Bearbeitungen gab es mir ein ähnliches Objekt, aber ich kann es immer noch nicht benutzen, da ich obj1 in meinem Code verwenden kann –

Antwort

16

Ich denke, der JavaScriptSerializer erstellt kein dynamisches Objekt.

So sollten Sie die Klasse definieren zuerst:

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

Und deserialisieren, dass anstelle von object:

serializer.Deserialize<MyObj>(str); 

Nicht getestet, bitte versuchen Sie es.

7

Ich glaube, Sie sind für diese Suche:

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

Das gleiche Problem mir passiert ist. Also, wenn der Dienst die Antwort als JSON-String zurückgibt Sie die Zeichenfolge zuerst deserialisieren haben, dann werden Sie in der Lage sein, den Objekttyp aus, es deserialisieren richtig:

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 Sicher, es wird funktionieren ....;)

3

Dies kann nützlich sein:

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

Wo "json" die Zeichenfolge ist, die die JSON-Werte enthält. Dann, um die Werte aus dem JSONObject abrufen Sie

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

Ändern MyPropertyType in den richtigen Typ verwenden (ToInt32, ToString, ToBoolean, etc).

0

Mit diesem Code:

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