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

将JSON字符串反序列化为c#对象,c#,json,asp.net-mvc-3,c#-4.0,C#,Json,Asp.net Mvc 3,C# 4.0,我的应用程序是用C#编写的Asp.NETMVC3。 这就是我的要求。我想要一个如下格式的对象。这个对象应该在我反序列化Json字符串时实现 var obj1 = new { arg1=1,arg2=2 }; 使用以下代码后: string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}"; JavaScriptSerializer serializer1 = new JavaScriptSerializer(); object o

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

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

使用以下代码后:

string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}";
JavaScriptSerializer serializer1 = new JavaScriptSerializer();
object obje = serializer1.Deserialize<object>(str);
string str=“{\'Arg1\':\'Arg1Value\',\'Arg2\':\'Arg2Value\'”;
JavaScriptSerializer serializer1=新的JavaScriptSerializer();
objectobje=serializer1.反序列化(str);
我得到的对象,即obje不作为obj1


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

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

因此,您应该首先定义类:

class MyObj {
    public int arg1 {get;set;}
    public int arg2 {get;set;}
}
并反序列化该对象,而不是
对象

serializer.Deserialize<MyObj>(str);
序列化程序。反序列化(str);

不是测试,请尝试。

我相信您正在寻找:

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

同样的问题也发生在我身上。因此,如果服务以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);

            }
        }
string json=string.Empty;
使用(var streamReader=newstreamreader(response.GetResponseStream(),true))
{
json=新的JavaScriptSerializer().Deserialize(streamReader.ReadToEnd());
}
//要反序列化到您的对象类型。。。
MyType MyType;
使用(var memoryStream=new memoryStream())
{
byte[]jsonBytes=Encoding.UTF8.GetBytes(@json);
memoryStream.Write(jsonBytes,0,jsonBytes.Length);
memoryStream.Seek(0,SeekOrigin.Begin);
使用(var jsonReader=JsonReaderWriterFactory.CreateJsonReader(memoryStream,Encoding.UTF8,XmlDictionaryReaderQuotas.Max,null))
{
var serializer=newdatacontractjsonserializer(typeof(MyType));
myType=(myType)serializer.ReadObject(jsonReader);
}
}
4.它肯定会起作用……)

这可能有用:

var serializer = new JavaScriptSerializer();
dynamic jsonObject = serializer.Deserialize<dynamic>(json);
将MyPropertyType更改为正确的类型(ToInt32、ToString、ToBoolean等)。

使用以下代码:

var result=JsonConvert.DeserializeObject<List<yourObj>>(jsonString);
var result=JsonConvert.DeserializeObject(jsonString);
解决方案:

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

这个问题已经存在:@jbtule谢谢,我尝试了上面链接给出的代码。经过一些编辑,它给了我一个类似的对象,但我仍然不能使用它,因为我可以在我的代码中使用obj1 100%正确答案。谢谢
 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; }
 }