将JSON字符串反序列化为c#对象
我的应用程序是用C#编写的Asp.NETMVC3。 这就是我的要求。我想要一个如下格式的对象。这个对象应该在我反序列化Json字符串时实现将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
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; }
}