Home > Net >  Can't deserialize json from Api
Can't deserialize json from Api

Time:04-28

I'm trying to get data from my Api to display it on my Android Xamarin project.

My Api has JWT Authentication. I'm able to get the token and the response from my Api correct but when I have to deserialize it, either it won't be able to do it or it won't return anything.

Here is the method that isn't working properly

private async Task<T> HttpGetAsync<T>(string url, string token)
        {
            T result = default(T);

            try
            {
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
                HttpResponseMessage response = httpClient.GetAsync(url).Result;
                HttpContent content = response.Content;

                if (response.IsSuccessStatusCode)
                {
                    var jsonResponse = await content.ReadAsStringAsync();
                    result = JsonConvert.DeserializeObject<T>(jsonResponse);
                }
                else
                {
                    throw new Exception(((int)response.StatusCode).ToString()   " - "   response.ReasonPhrase);
                }
            }
            catch (Exception ex)
            {
                one rror(ex.ToString());
            }

            return result;
        }

So it will return the response as I said right

var jsonResponse = await content.ReadAsStringAsync();

But then it will return null in this line

result = JsonConvert.DeserializeObject<T>(jsonResponse);

And if I try to return a list (JsonConvert.DeserializeObject<List>) it will return this json error

Cannot deserialize the current JSON array (e.g. [1,2,3]) into type...

On my code the T would be my Category entity

public class Category
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

This is my json

{
    "data": [
        {
            "id": 1,
            "name": "Alianzas"
        },
        {
            "id": 2,
            "name": "Pendientes"
        },
        {
            "id": 3,
            "name": "Pulseras"
        },
        {
            "id": 4,
            "name": "Colgantes"
        },
        {
            "id": 5,
            "name": "Gargantillas"
        },
        {
            "id": 6,
            "name": "Relojes"
        }
    ],
    "meta": {
        "totalCount": 6,
        "pageSize": 20,
        "currentPage": 1,
        "totalPages": 1,
        "hasNextPage": false,
        "hasPreviousPage": false
    }
}

I'm gessing the error here is trying to deserialize the json with the "data" and "meta" label ? Please help.

CodePudding user response:

In this case you gotta have an object that should be something like

public class MyObject
{
    public List<Category> data { get; set; }
    public Meta meta { get; set; }
}

So you should also have a Meta class which describes all meta properties and then use it like this

HttpGetAsync<MyObject>(url, token);
  • Related