簡體   English   中英

無法反序列化當前JSON對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM