繁体   English   中英

遍历复杂对象以设置视图模型值

[英]Iterate through complex object to set view model values

假设以下复杂的Json响应是由远程服务发回的

 {
      "query": "search",
      "skills": {
           "skill": [
                "php",
                "java",
                "C#"
           ]
      },
      "results": [
           {
                "name": "jim",
                "dept": "technology"
           },
           {
                "name": "peter",
                "dept": "technology"
           }
      ]
 }

它的格式是固定的,我已将其存储为字符串

 string jsonString = JsonConvert.SerializeObject(Res);

我有一个回应模型

public class Response 
{
    public string query { get; set; }       
    public Skill skills { get; set; }
    public List<Employees> results { get; set; }
}

public class Skill 
{
    public List<string> skill { get; set; }

}

public class Employees
{
    public string name { get; set; }
    public string dept { get; set; }
}

我有一个视图模型

 public class EmployeeExperts {
      public List<EmployeeInfo> employee { get; set; }
 }

 public class EmployeeInfo {
      public string name { get; set; }
      public string dept { get; set; }
 }

我已经反驳了全班的反应

 var Obj = JsonConvert.DeserializeObject<Response>(jsonString);

然后,我将如何遍历Obj并将其从控制器连接到EmployeeExperts视图模型?

例如EmployeeExperts.EmployeeInfo [0] = Response.results [0] .name

我只是在尝试正确解析响应并将其显示在视图上。 此外,我还有另一个问题-这是做所有这些事情的正确方法吗?

首先,我注意到您的EmployeesEmployeeInfo是相同的,它不需要。

您可以按以下方式更改EmployeeExperts类:

public class EmployeeExperts {
      public List<Employee> Employees { get; set; }
 }

现在您可以编写:

 var Obj = JsonConvert.DeserializeObject<Response>(jsonString);
 var experts = new EmployeeExperts();

 // You can directly assign list like this and iterate through `experts.Employees` list
 experts.Employees = obj.results;

注意:我尚未测试以上代码,您可能需要将结果转换为List<Employee>

此外,我还有另一个问题-这是做所有这些事情的正确方法吗?

我已经将AutoMapper用于此类对象到对象的转换。 它非常灵活,可以处理95%的案件。 在这95%的情况下,它可以节省您原本用于转换的大量时间。

尝试一下,看看是否符合您的目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM