2012-04-27 7 views
17

Мое приложение находится в Asp.Net MVC3, закодированном на C#. Это мое требование. Я хочу объект, который находится в следующем формате. Этот объект должен быть достигнут, когда я десериализую строку Json.Deserialize JSON string to C# object

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

enter image description here

После использования код ниже:

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

объект, что я получаю то OBJE не действует как obj1

enter image description here

Здесь в этом например, моя строка JSON статична, но на самом деле строка JSON будет динамически создаваться во время выполнения, поэтому я не смогу постоянно получать Arg1 и Arg2.

+0

Этот вопрос уже существует: http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object – jbtule

+0

@jbtule спасибо, я попробовал код, указанный в приведенной выше ссылке. После некоторого редактирования он дал мне аналогичный объект, но я все еще не могу его использовать, так как я могу использовать obj1 в своем коде –

ответ

16

Я думаю, что JavaScriptSerializer не создает динамический объект.

Таким образом, вы должны определить класс первый:

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

И десериализации, что вместо object:

serializer.Deserialize<MyObj>(str); 

Не testet, пожалуйста, попробуйте.

7

Я считаю, что вы ищете это:

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

Такая же проблема случилось со мной. Таким образом, если служба возвращает ответ в виде строки JSON вы должны десериализациями строки первой, то вы будете иметь возможность десериализации типа объекта из него правильно:

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 Конечно, это будет работать ....;)

3

Это может быть полезно:

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

Где "JSON" является строкой, которая содержит значение в формате JSON. Затем для получения значений из JSONObject вы можете использовать

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

Изменение MyPropertyType к соответствующему типу (ToInt32, ToString, ToBoolean и т.д.).

0

Используйте этот код:

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