【问题标题】:Iterate through complex object to set view model values遍历复杂对象以设置视图模型值
【发布时间】:2014-10-15 06:52:52
【问题描述】:

假设以下复杂的 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

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

【问题讨论】:

    标签: c# json asp.net-mvc-4


    【解决方案1】:

    首先我注意到你的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&lt;Employee&gt;

    此外,我还有一个问题 - 这是做这一切的正确方法吗?

    我使用AutoMapper 进行对象到对象的转换。它很灵活,可以处理 95% 的案例。在这 95% 的情况下,它可以为您节省大量用于转化的时间。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-04
      • 2023-01-05
      • 2019-04-10
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多