2012-04-27 97 views
17

我的应用程序是在C#中编写的Asp.Net MVC3。 这就是我的要求。我想要一个以下格式的对象。当我反序列化Json字符串时,应该实现此对象。反序列化JSON字符串到C#对象

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 2012-04-27 13:28:19

+0

@jbtule谢谢,我尝试了上述链接给出的代码。经过一些编辑,它给了我一个类似的对象,但我仍然无法使用它,因为我可以在我的代码中使用obj1 – 2012-04-27 14:03:30

回答

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);