无法从 Api 反序列化 json
Can't deserialize json from Api
我正在尝试从我的 Api 获取数据以将其显示在我的 Android Xamarin 项目中。
我的 Api 有 JWT 身份验证。我能够从我的 Api 获得令牌和响应是正确的,但是当我必须反序列化它时,它要么无法做到,要么 return 什么也做不到。
这是无法正常工作的方法
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)
{
OnError(ex.ToString());
}
return result;
}
所以它将return如我所说的响应
var jsonResponse = await content.ReadAsStringAsync();
但它会在这一行return为空
result = JsonConvert.DeserializeObject<T>(jsonResponse);
如果我尝试 return 列表 (JsonConvert.DeserializeObject) 它将 return 这个 json 错误
Cannot deserialize the current JSON array (e.g. [1,2,3]) into type...
在我的代码中,T 将是我的 Category
实体
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
}
这是我的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
}
}
我猜这里的错误是试图用“数据”和“元”标签反序列化 json?请帮忙。
在这种情况下,您必须有一个类似于
的对象
public class MyObject
{
public List<Category> data { get; set; }
public Meta meta { get; set; }
}
所以你还应该有一个描述所有元属性的元class,然后像这样使用它
HttpGetAsync<MyObject>(url, token);
我正在尝试从我的 Api 获取数据以将其显示在我的 Android Xamarin 项目中。
我的 Api 有 JWT 身份验证。我能够从我的 Api 获得令牌和响应是正确的,但是当我必须反序列化它时,它要么无法做到,要么 return 什么也做不到。
这是无法正常工作的方法
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)
{
OnError(ex.ToString());
}
return result;
}
所以它将return如我所说的响应
var jsonResponse = await content.ReadAsStringAsync();
但它会在这一行return为空
result = JsonConvert.DeserializeObject<T>(jsonResponse);
如果我尝试 return 列表 (JsonConvert.DeserializeObject) 它将 return 这个 json 错误
Cannot deserialize the current JSON array (e.g. [1,2,3]) into type...
在我的代码中,T 将是我的 Category
实体
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
}
这是我的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
}
}
我猜这里的错误是试图用“数据”和“元”标签反序列化 json?请帮忙。
在这种情况下,您必须有一个类似于
的对象public class MyObject
{
public List<Category> data { get; set; }
public Meta meta { get; set; }
}
所以你还应该有一个描述所有元属性的元class,然后像这样使用它
HttpGetAsync<MyObject>(url, token);