我有一个返回Json字符串的Web服务。 我的问题是我很难读懂它
我试过:
JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
string jsonData = reader.ReadToEnd();
var myobj = jsSerializer.Deserialize<List<CinfoRichiesta>>(jsonData);
但我怎样才能从&#34;学生那里获得价值?和&#34;地点&#34;? 使用javascript:&#34; var j = jQuery.parseJSON(msg.d);&#34;但我认为使用c#代码会有所不同
这是字符串的示例:
{"Questions":{
"id":"2",
"BOOK":"3",
"students":{
"class":"3",
"theme","43"
},
"locations":{
"h":"0",
"L":"3"
}
}
}
答案 0 :(得分:0)
您要反序列化为CinfoRichiesta
类型的集合,该集合应包含students
和locations
的属性值。
假设您的JSON格式正确,并且您的类定义适合于响应(我建议通过将整个响应字符串粘贴到json2csharp.com中来仔细检查它)
一旦验证完毕,您就应该能够在内部看到students
和locations
个收藏集:
foreach(Question q in myobj)
{
Console.WriteLine(q.students.class)
}
应该为您提供3
的结果。
修改的
我认为您的主要问题是,您无法访问students
和locations
的属性。确保Students
是它自己的类:
public class Students
{
public int class { get; set; }
public int theme { get; set; }
}
并且您的locations
课程应为:
public class Locations
{
public int h { get; set; }
public int l { get; set; }
}
然后你应该有一个questions
课程,同时安排students
和locations
:
public class Questions
{
public int id { get; set; }
public int book { get; set; }
public Student students { get; set; }
public Locations locations { get; set; }
}
使用JSON反序列化时,对象属性名称(即class
)在大小写方面与响应字符串匹配非常重要。所以如果你把它写成public int Theme
,它就不会直接映射。
在编码标准方面略有烦恼,但嘿嘿:-)
答案 1 :(得分:0)
首先,您的JSON无效,这就是您遇到的第一个问题。例如,您可以在http://jsonlint.com/验证这一点。
我目前已通过以下方式修复此问题:
public class Rootobject
{
public Questions Questions { get; set; }
}
public class Questions
{
public string id { get; set; }
public string BOOK { get; set; }
public Students students { get; set; }
public Locations locations { get; set; }
}
public class Students
{
public string _class { get; set; }
public string theme { get; set; }
public string _43 { get; set; }
}
public class Locations
{
public string h { get; set; }
public string L { get; set; }
}
第二,你的类应该是正确的,使用当前的JSON,它应该看起来像这样
var myobj = jsSerializer.Deserialize<List<Rootobject>>(jsonData);
在此之后你可以像这样反序列化
myobj.Questions.students._class
然后你可以获得这样的信息
{{1}}