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

Deserialize JSON in C# to array

我在对某个网站进行反序列化时遇到问题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"
      }
    ]
  }
}

这是我要反序列化的 class:

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 应反序列化为数组。我正在尝试使用 JArray 方法,我需要先进行反序列化,然后才能转换为数组。

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

您需要以下内容类:

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);

给您的专业提示:Select 您的 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);

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

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

 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();