【问题标题】:Deserialize JSON string to c# object将 JSON 字符串反序列化为 c# 对象
【发布时间】:2012-04-27 12:54:19
【问题描述】:

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

【问题讨论】:

  • 这个问题已经存在:stackoverflow.com/questions/3142495/…
  • @jbtule 谢谢,我尝试了上面链接中给出的代码。经过一些编辑,它给了我一个类似的对象,但我仍然无法使用它,因为我可以在我的代码中使用 obj1

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


【解决方案1】:

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

所以你应该先定义类:

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

并反序列化它而不是 object:

serializer.Deserialize<MyObj>(str);

不是testet,请尝试。

【讨论】:

    【解决方案2】:

    使用此代码:

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

    【讨论】:

    • 100% 正确答案。谢谢
    【解决方案3】:

    我相信您正在寻找这个:

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

    【讨论】:

      【解决方案4】:

      这可能有用:

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

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

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

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

      【讨论】:

        【解决方案5】:

        同样的问题也发生在我身上。因此,如果服务以 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 当然它会起作用.... ;)

        【讨论】:

          【解决方案6】:

          解决方案:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-04-27
            • 2019-05-30
            • 1970-01-01
            • 1970-01-01
            • 2021-07-28
            • 1970-01-01
            • 2014-01-04
            相关资源
            最近更新 更多