26

我的应用程序位于用 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。

4

6 回答 6

20

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

所以你应该先定义类:

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

并反序列化它而不是object

serializer.Deserialize<MyObj>(str);

不是testet,请尝试。

于 2012-04-27T13:10:54.330 回答
12

使用此代码:

var result=JsonConvert.DeserializeObject<List<yourObj>>(jsonString);
于 2017-09-27T10:45:34.247 回答
7

我相信你正在寻找这个:

string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}";
JavaScriptSerializer serializer1 = new JavaScriptSerializer();
object obje = serializer1.Deserialize(str, obj1.GetType());
于 2012-04-27T13:13:44.413 回答
3

这可能有用:

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

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

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

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

于 2016-01-05T19:12:24.360 回答
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 当然它会工作.... ;)

于 2014-05-04T14:23:27.990 回答
2

解决方案 :

 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; }
 }
于 2019-07-30T12:40:23.787 回答