Список возврата из статического асинхронного метода задачи - PullRequest
0 голосов
/ 10 октября 2019

У меня есть метод Task, который вызывает удаленный API, который принимает возвращенный JSON, преобразует данные в объекты C # и отображает данные на консоли. Я хотел бы, чтобы этот метод также возвращал список, чтобы я мог использовать его в другом месте, может кто-нибудь показать мне, как, когда я продолжаю получать ошибку, когда я изменяю сигнатуру метода на тип списка, все ответы приветствуются! -

// asynchronous retrieve data from api
public static async Task GetUser()
{
     //baseUrl
     string baseUrl = "http://pokeapi.co/api/v2/pokemon/";
     try
     {
          // HttpClient implements a IDisposable interface
          using (HttpClient client = new HttpClient())

          //initiate Get Request 
          using (HttpResponseMessage res = await client.GetAsync(baseUrl))

          //convert response to c# object
          using (HttpContent content = res.Content)
          {
              //convert data content to string using await
              var data = await content.ReadAsStringAsync();

              //If the data is not null, parse(deserialize) the data to a C# object
              if (data != null)
              {
                   var result = JsonConvert.DeserializeObject<UserList>(data);
                   foreach (var u in result.Results)
                   {
                       Console.WriteLine("Name: {0} | Url: {1}", u.Name, u.Url);
                   }
              }
              else
              {
                  Console.WriteLine("No returned data");
              }
          }
     }
     catch (Exception exception)
     {
         Console.WriteLine(exception);
     }
}

User.cs -

 public class User
    {
        [Key]
        public int UserId { get; set; }
        public string Name { get; set; }
        public string Url { get; set; }

    }

UserList.cs -

  public class UserList
    {
        public List<User> Results { get; set; }
    }

Ответы [ 3 ]

1 голос
/ 10 октября 2019
 public static async Task<UserList>  GetUser()
        {
            //baseUrl
            string baseUrl = "http://pokeapi.co/api/v2/pokemon/";
            try
            {
                // HttpClient implements a IDisposable interface
                using (HttpClient client = new HttpClient())
                {
                    //initiate Get Request 
                    using (HttpResponseMessage res = await client.GetAsync(baseUrl))
                    {
                        //convert response to c# object
                        using (HttpContent content = res.Content)
                        {
                            //convert data content to string using await
                            var data = await content.ReadAsStringAsync();

                            //If the data is not null, parse(deserialize) the data to a C# object
                            if (data != null)
                            {
                                return  JsonConvert.DeserializeObject<UserList>(data);

                            }
                            else
                            {
                                return null;
                            }
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                return null;
            }
        }

Вы можете использовать ожидание после, как это:

UserList test =  await GetUser();
1 голос
/ 10 октября 2019
the return has to be a Task<List<User>>, not just List<User>
0 голосов
/ 10 октября 2019
// asynchronous retrieve data from api
public static async Task<List<User>> GetUser()
{
    //Connect to the webservice and get the data     
    //Parse the data into a list of Users
    var myList = parseResultJsonFromServer(serverResult);

    //myList is of type List<User> and ready to be returned
    return myList
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...