使用 C# 和 Json.net 获取反序列化 json 后的所有标题

本文关键字:标题 json 反序列化 Json net 获取 使用 | 更新日期: 2023-09-27 18:35:59

我正在使用一个维基百科api,其中包含维基百科文章中所有地方的外部链接。我的维基百科 api 调用是:https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gspage=Berlin&gslimit=500&gsprop=type|名称|暗淡|国家|地区|全球&格式=JSON

我使用 JsonToCsharp 为 json 对象创建 c# 类,如下所示:

  public class Geosearch
  {
    public int pageid { get; set; }
    public int ns { get; set; }
    public string title { get; set; }
    public double lat { get; set; }
    public double lon { get; set; }
    public double dist { get; set; }
    public string primary { get; set; }
    public string type { get; set; }
    public string name { get; set; }
    public object dim { get; set; }
    public string country { get; set; }
    public string region { get; set; }
  }
 public class Query
 {
   public List<Geosearch> geosearch { get; set; }
 }  
 public class RootObject
 {
  public string batchcomplete { get; set; }
  public Query query { get; set; }
 }

我的反序列化代码如下。使用此代码,我只得到了一个标题。但我想从这个 API 中获取所有标题。我知道我应该做一个foreach循环,但无法获得如何实现它的逻辑。

static void Main(string[] args)
    {
        WebClient client = new WebClient();
        var GeoResponse = client.DownloadString("https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gspage=Berlin&gslimit=500&gsprop=type|name|dim|country|region|globe&format=json");
        RootObject json = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<RootObject>(GeoResponse);
        var firstKey = json.query.geosearch.First().title;
        Console.WriteLine(firstKey);
    }

使用 C# 和 Json.net 获取反序列化 json 后的所有标题

这工作正常 -

var o = new HttpClient();
var res = new StreamReader(o.GetStreamAsync("https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gspage=Berlin&gslimit=500&gsprop=type|name|dim|country|region|globe&format=json").Result).ReadToEnd() ;
var obj = JsonConvert.DeserializeObject<RootObject>(res).query.geosearch.Select(a => a.title).ToList();
// count == 500
obj.Foreach(a => Console.WriteLine(a));

我刚刚修改了我的代码,它运行良好。

 var response = client.GetAsync("https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gspage=Berlin&gslimit=500&gsprop=type|name|dim|country|region|globe&format=json").Result;
            if (response.IsSuccessStatusCode)
            {
                var responseContent = response.Content;
                string responseString = responseContent.ReadAsStringAsync().Result;
                var obj = JsonConvert.DeserializeObject<RootObject>(responseString).query.geosearch.Select(a => a.title).ToList();
                foreach (var item in obj)
                {
                    Console.WriteLine(item);
                }
            }
        }