迭代复杂对象以设置视图模型值

时间:2014-10-15 06:52:52

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

让我们说以下复杂的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 View模型?

e.g。 EmployeeExperts.EmployeeInfo [0] = Response.results [0] .name

我只是尝试正确解析响应并在视图中显示它。另外,我还有另一个问题 - 这是否是正确的做法?

1 个答案:

答案 0 :(得分: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<Employee>

  

此外,我还有另一个问题 - 这是否是正确的做法?

我已将AutoMapper用于此类对象进行对象转换。它很灵活,可以处理95%的案例。在这95%的情况下,它可以节省您花在转换上的大部分时间。

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