让我们说以下复杂的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
我只是尝试正确解析响应并在视图中显示它。另外,我还有另一个问题 - 这是否是正确的做法?
答案 0 :(得分:1)
首先我注意到您的Employees
和EmployeeInfo
相同,但不需要。
您可以按如下方式更改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%的情况下,它可以节省您花在转换上的大部分时间。
试一试,看看是否符合你的目的。