[英]Cannot deserialize the current JSON object
大家好,整天都在。 無法弄清楚我出了什么問題。 這是我的課:
public class Staff
{
public string FirstName { get; set; }
public string LastName { get; set; }
public object PhoneNumber { get; set; }
public string Email { get; set; }
public string UserName { get; set; }
public string JobTitle { get; set; }
public string Manager { get; set; }
}
這是調用api的代碼:
private List<Staff> getAllStaff()
{
try
{
var resultList = new List<Staff>();
var client = new HttpClient();
var data = client.GetAsync("http://localhost:8000/api/staff").ContinueWith(response =>
{
var result = response.Result;
if (result.StatusCode == System.Net.HttpStatusCode.OK)
{
var readResult = result.Content.ReadAsAsync<List<Staff>>();
readResult.Wait();
resultList = readResult.Result;
}
});
data.Wait();
return resultList;
}
catch (Exception ex)
{
throw ex;
}
}
傳遞給視圖的數據:
public ActionResult Index()
{
var staff = getAllStaff();
return View(staff);
}
最后返回了一個json示例:
[ { "FirstName": "xxxx", "LastName": "xxxx", "PhoneNumber": "xxxx", "Email": "xxxx", "UserName": "xxxx", "JobTitle": "xxxx", "Manager": "xxxx" }, { "FirstName": "xxxx", "LastName": "xxxx", "PhoneNumber": "xxxx", "Email": "xxxx", "UserName": "xxxx", "JobTitle": "xxxx", "Manager": "xxxx" }, ]
我不斷得到的錯誤:
無法將當前JSON對象(例如{“ name”:“ value”})反序列化為類型'System.Collections.Generic.List`1 [json.Models.Staff]',因為該類型需要JSON數組(例如[1, 2,3])正確反序列化。 要解決此錯誤,可以將JSON更改為JSON數組(例如[1,2,3]),也可以更改反序列化類型,使其成為普通的.NET類型(例如,不像整數這樣的原始類型,也不像這樣的集合類型)數組或列表),可以從JSON對象反序列化。 還可以將JsonObjectAttribute添加到類型中,以強制其從JSON對象反序列化。
api可能同時返回數組和單個記錄。 在這種情況下,您的代碼應兼顧兩者。 您還要求這些阻止呼叫帶來麻煩。 使代碼一直保持異步狀態。
private async Task<List<Staff>> getAllStaff() {
var resultList = new List<Staff>();
var client = new HttpClient();
var response = await client.GetAsync("http://localhost:8000/api/staff");
if (response.StatusCode == System.Net.HttpStatusCode.OK) {
bool arrayParseFailed = false;
try {
resultList = await response.Content.ReadAsAsync<List<Staff>>();
} catch (Exception ex) {//Array pase failed so try single
arrayParseFailed = true;
}
if (arrayParseFailed) {
try {
var staff = await response.Content.ReadAsAsync<Staff>();
if (staff != null) {
resultList.Add(staff);
}
} catch (Exception ex) {
}
}
}
return resultList;
}
所以現在該動作也應該更新為異步
public async Task<ActionResult> Index() {
var staff = await getAllStaff();
return View(staff);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.