Json 在 c# 中转换为对象列表时反序列化 return null

Json Deserialise return null when convert to list of object in c#

我正在尝试使用 Newtonsoft.Json 将 json 反序列化为自定义 class 列表。

这是我的代码:

public List<EmployeeModel> getEmployee()
{
    string Baseurl = "http://dummy.restapiexample.com/api/v1/";
    using (var client = new HttpClient())
    {
        //Passing service base url  
        client.BaseAddress = new Uri(Baseurl);

        client.DefaultRequestHeaders.Clear();
        //Define request data format  
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        //Sending request to find web api REST service resource GetAllEmployees using HttpClient  

        var EmpResponse = new List<EmployeeModel>();
        var Res = client.GetAsync("employees");

        Res.Wait();
        var result = Res.Result;
        //Checking the response is successful or not which is sent using HttpClient  
        if (result.IsSuccessStatusCode)
        {
            //Storing the response details recieved from web api   
            var r = result.Content.ReadAsStringAsync().Result;


            EmpResponse = JsonConvert.DeserializeObject<List<EmployeeModel>>(r);

            //Deserializing the response recieved from web api and storing into the Employee list  
        }
        //returning the employee list to view  
        return EmpResponse;
    }
}

当我检查变量 r 值时,我得到以下 Json 字符串:

[
    {
        "id": "317",
        "employee_name": "Nitza",
        "employee_salary": "775",
        "employee_age": "1",
        "profile_image": ""
    },
    {
        "id": "318",
        "employee_name": "Nitza Ivri",
        "employee_salary": "10000",
        "employee_age": "33",
        "profile_image": ""
    }
]

此外,我的模型代码如下:

public class EmployeeModel
{
    public string id { get; private set; }
    public string employee_name { get; private set; }
    public string employee_salary { get; private set; }
    public string employee_age { get; private set; }
}

原因是您在 EmployeeModel 中的属性具有私有集。您需要从您的属性中删除 private 然后它才能成功反序列化。您的实体应如下所示:

public class EmployeeModel
{
    public string id { get; set; }
    public string employee_name { get; set; }
    public string employee_salary { get; set; }
    public string employee_age { get; set; }
}

此外,您的 EmployeeModel 不包含 属性 profile_image。您需要将此 属性 添加到您的模型中。

如果将属性设置器保持为私有对您来说很重要,您可以提供一个具有如下参数的构造函数:

public class EmployeeModel
{
    public EmployeeModel(string id, string employee_name,string employee_salary, string employee_age, string profile_image )
    {
        this.id = id;
        this.employee_name = employee_name;
        this.employee_salary = employee_salary;
        this.employee_age = employee_age;
        this.profile_image = profile_image;
    }

    public string id { get; private set; }
    public string employee_name { get; private set; }
    public string employee_salary { get; private set; }
    public string employee_age { get; private set; }
    public string profile_image { get; private set; }
}