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

时间:2012-04-27 12:54:20

标签: c# json asp.net-mvc-3 c#-4.0

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

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。

6 个答案:

答案 0 :(得分:18)

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

所以你应该先定义这个类:

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

反序列化而不是object

serializer.Deserialize<MyObj>(str);

不测试,请尝试。

答案 1 :(得分:7)

我相信你正在寻找这个:

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

答案 2 :(得分:4)

使用此代码:

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

答案 3 :(得分:3)

这可能很有用:

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

哪里&#34; json&#34;是包含JSON值的字符串。然后从jsonObject中检索值,您可以使用

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

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

答案 4 :(得分: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当然可以工作....;)

答案 5 :(得分:1)

解决方案:

 public Response Get(string jsonData) {
     var json = JsonConvert.DeserializeObject<modelname>(jsonData);
     var data = StoredProcedure.procedureName(json.Parameter, json.Parameter, json.Parameter, json.Parameter);
     return data;
 }

型号:

 public class modelname {
     public long parameter{ get; set; }
     public int parameter{ get; set; }
     public int parameter{ get; set; }
     public string parameter{ get; set; }
 }