首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从VK解析大学

从VK解析大学
EN

Stack Overflow用户
提问于 2017-03-21 23:18:14
回答 1查看 171关注 0票数 1

我需要写信给List<string>的大学名单。我已经把国家和城市写在名单上了。但在大学里,数据有一点不同。有{"response":[201,,我不知道如何处理它。我成功地从这里获得了一些国家。在这里,我需要把大学头衔写成List<string>。这是代码,我是怎么得到国家的。我在城市里使用的类似代码。在尝试执行这一行var universityRepository = new RootObject((int)universityInResponse["id"], (string)universityInResponse["title"]);时,我得到了一个未处理的异常。类的完整代码:

代码语言:javascript
复制
public class GettingUniversity
{
    public static List<RootObject> listOfUniversitiesRoot = new List<RootObject>();//This List contains Id and Titles of universities
    public List<string> listOfUniversities = new List<string>();//list with names of the universities
    private string jsonString; //string for getting data from the url
    public async Task<List<RootObject>> FetchAsync(string url)
    {
        //getting data process goes here
        using (var httpClient = new System.Net.Http.HttpClient())
        {
            var stream = await httpClient.GetStreamAsync(url);
            StreamReader reader = new StreamReader(stream);
            jsonString = reader.ReadToEnd();
        }

        var responseUniversities = JArray.Parse(JObject.Parse(jsonString)["response"].ToString());//parsing data from jsonstring

        foreach (var universityInResponse in responseUniversities)//the foreach-loop
        {
            var universityRepository = new RootObject((int)universityInResponse["id"], (string)universityInResponse["title"]);
            //listOfUniversitiesRoot.Add(universityRepository);//adding to the list with names of the universities
            //listOfUniversities.Add(universityRepository.Title);
        }

        return listOfUniversitiesRoot;//returned list
    }

属性在这里表示:

代码语言:javascript
复制
namespace KoshelnykTestTask
{
    //Here I have set properties for FetchAsync(string url) to get countries and cities 
    public class RootObject
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public RootObject(int Id, string Title)
        {
            this.Id = Id;
            this.Title = Title;
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-21 23:43:33

您的问题是返回的JSON包含一个多态数组--第一个条目是一个整数,其余的是包含大学信息的对象:

代码语言:javascript
复制
{
   "response":[
      201,
      {
         "id":1096,
         "title":"КПИ им. И. Сикорского"
      },
      {
         "id":1135,
         "title":"НУФВСУ (бывш. КГИФК)"
      },
      {
         "id":1140,
         "title":"КГАВТ им. Конашевича-Сагайдачного"
      },

在反序列化对象之前,需要过滤整数值,可以这样做:

代码语言:javascript
复制
var universityRepository  = JToken.Parse(jsonString)["response"]
    // Filter the integer value by selecting only objects
    .OfType<JObject>()
    // Deserialize each object to a RootObject
    .Select(o => o.ToObject<RootObject>())
    // Return in a List<RootObject>
    .ToList();

var listOfUniversities = universityRepository
    .Select(u => u.Title)
    .ToList();

样品小提琴.

注意,似乎不需要将这些列表存储在静态或类变量中--您可以简单地将它们返回给调用者。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42939991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档