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

29

我的应用程序是使用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<object>(str);

我得到的对象,即 obje 并不像 obj1 一样起作用。

在此输入图片描述

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


这个问题已经存在了:https://dev59.com/GHA75IYBdhLWcg3wuLnD - jbtule
@jbtule 谢谢,我尝试了上面链接中给出的代码。经过一些编辑,它给了我一个类似的对象,但我仍然无法像使用obj1那样在我的代码中使用它。 - Shahbaz Chishty
6个回答

24

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

因此,您首先需要定义类:

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

而不是反序列化object,应该反序列化那个对象:

serializer.Deserialize<MyObj>(str);

未经测试,请尝试。


15

使用此代码:

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

100%正确答案。谢谢 - Rejwanul Reja

8
我相信你正在寻找这个:

我相信您正在寻找以下内容:

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

3
这可能会有帮助:
var serializer = new JavaScriptSerializer();
dynamic jsonObject = serializer.Deserialize<dynamic>(json);

当“json”为包含JSON值的字符串时,您可以使用以下方式从jsonObject中检索值:

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

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


3
解决方案:
 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; }
 }

2

我也遇到了同样的问题。如果服务以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. 确定它会运行.... ;)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接