将JSON字符串反序列化为c#对象

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

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

在此处输入图像描述

使用以下代码后:

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

我得到的对象即obje不作为obj1

在此处输入图像描述

在这个例子中,我的JSON字符串是静态的,但实际上JSON字符串将是动态生成的运行时,所以我将无法一直获得Arg1和Arg2。

我认为JavaScriptSerializer不会创建动态对象。

所以你应该首先定义类:

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

并反序列化而不是object

 serializer.Deserialize(str); 

不是测试,请尝试。

我相信你在寻找这个:

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

这可能很有用:

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

其中“json”是包含JSON值的字符串。 然后从您可能使用的jsonObject中检索值

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

将MyPropertyType更改为正确的类型(ToInt32,ToString,ToBoolean等)。

同样的问题发生在我身上。 因此,如果服务将响应作为JSON字符串返回,则必须首先对字符串进行反序列化,然后您可以正确地反序列化对象类型:

 string json= string.Empty; using (var streamReader = new StreamReader(response.GetResponseStream(), true)) { json= new JavaScriptSerializer().Deserialize(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当然它会起作用….;)

使用此代码:

 var result=JsonConvert.DeserializeObject>(jsonString);