从webservice

时间:2016-11-10 08:21:17

标签: c# json web-services

我有一个返回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"
        }
 }
}

2 个答案:

答案 0 :(得分:0)

您要反序列化为CinfoRichiesta类型的集合,该集合应包含studentslocations的属性值。

假设您的JSON格式正确,并且您的类定义适合于响应(我建议通过将整个响应字符串粘贴到json2csharp.com中来仔细检查它)

一旦验证完毕,您就应该能够在内部看到studentslocations个收藏集:

foreach(Question q in myobj)
{ 
    Console.WriteLine(q.students.class)
}

应该为您提供3的结果。

修改

我认为您的主要问题是,您无法访问studentslocations的属性。确保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课程,同时安排studentslocations

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