我的应用程序是在用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。
答案 0 :(得分:18)
我认为JavaScriptSerializer不会创建动态对象。
所以你应该先定义这个类:
class MyObj {
public int arg1 {get;set;}
public int arg2 {get;set;}
}
反序列化而不是object
:
serializer.Deserialize<MyObj>(str);
不测试,请尝试。
答案 1 :(得分:7)
我相信你正在寻找这个:
string str = "{\"Arg1\":\"Arg1Value\",\"Arg2\":\"Arg2Value\"}";
JavaScriptSerializer serializer1 = new JavaScriptSerializer();
object obje = serializer1.Deserialize(str, obj1.GetType());
答案 2 :(得分:4)
使用此代码:
var result=JsonConvert.DeserializeObject<List<yourObj>>(jsonString);
答案 3 :(得分:3)
这可能很有用:
var serializer = new JavaScriptSerializer();
dynamic jsonObject = serializer.Deserialize<dynamic>(json);
哪里&#34; json&#34;是包含JSON值的字符串。然后从jsonObject中检索值,您可以使用
myProperty = Convert.MyPropertyType(jsonObject["myProperty"]);
将MyPropertyType更改为正确的类型(ToInt32,ToString,ToBoolean等)。
答案 4 :(得分:1)
同样的问题发生在我身上。因此,如果服务将响应作为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当然可以工作....;)
答案 5 :(得分:1)
解决方案:
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; }
}