将C#中的JSON反序列化为数组

时间:2016-10-20 13:40:51

标签: c# json deserialization json-deserialization

我无法对某个json进行反序列化我正在收集一个网站。

{
  "query": {
    "search": [
      {
        "ns": 0,
        "title": "test",
        "snippet": "test"
      },
      {
        "ns": 0,
        "title": "test2",
        "snippet": "test2"
      },
      {
        "ns": 0,
        "title": "test3",
        "snippet": "test3"
      },
      {
      "ns": 0,
      "title": "test4",
      "snippet": "test4"
      }
    ]
  }
}

这是我尝试反序列化的课程:

private void DesURL_Click(object sender, RoutedEventArgs e)
    {
        string url = @"https://pt.wikipedia.org/w/api.php.....";

        var json = new WebClient().DownloadString(url);

        var listaURL = JsonConvert.DeserializeObject<List<Query>>(json);

    }

当试图运行错误代码时,应将此json反序列化为数组。 Ai尝试utiilizar JArray我需要进行反序列化的方法才能变成数组。

目标是将标题和摘要转换为字符串,以便从中提取信息。

3 个答案:

答案 0 :(得分:1)

您需要以下课程:

public class Rootobject
{
    public Query query { get; set; }
}

public class Query
{
    public Search[] search { get; set; }
}

public class Search
{
    public int ns { get; set; }
    public string title { get; set; }
    public string snippet { get; set; }
}

然后你可以像这样反序列化:

var listUrl = JsonConvert.DeserializeObject<Rootobject>(json);

答案 1 :(得分:1)

专业提示:选择您的JSON并将其复制到剪贴板。现在转到Visual Studio并在编辑菜单上,选择性粘贴,然后将JSON粘贴为类。这会给你这个:

public class Rootobject
{
    public Query query { get; set; }
}

public class Query
{
    public Search[] search { get; set; }
}

public class Search
{
    public int ns { get; set; }
    public string title { get; set; }
    public string snippet { get; set; }
}

现在你可以像这样反序列化:

var listaURL = JsonConvert.DeserializeObject<Rootobject>(json);

答案 2 :(得分:0)

您的JSON不是数组。它包含一个query对象,其search属性具有数组值。

所以你的班级必须看起来像这样

 public class ResponseDto {
     public QueryDto Query {get; set;}
 }
 public class QueryDto {
     public IEnumerable<Query> Search {get; set;}
 }

 var data = JsonConvert.DeserializeObject<QueryDto>(json);
 var list = data.Query.Search.ToList();