如何使用RestSharp解析XML格式响应并填充List<Employee>集合
如何将XML响应映射到List集合?
嗨,我来帮你搞定这个XML解析的问题!首先,你得先调整一下你的Employee类——目前它的字段是私有的,不管用哪种解析方式都没法直接访问,所以先改成公共属性:
public class Employee { public int Id { get; set; } public string Name { get; set; } }
接下来给你两种常用的实现方案,你可以根据自己的需求选择:
方案一:手动解析(Linq to XML)
这种方式灵活直接,不需要额外定义响应实体类,适合快速处理简单XML结构:
private void reqEmployee(Employee empl) { // 你的原有请求代码... IRestResponse response = client.Execute(request); // 开始解析XML响应 if (!string.IsNullOrEmpty(response.Content)) { // 处理XML的默认命名空间 XNamespace ns = "http://test.dev.com/"; XDocument doc = XDocument.Parse(response.Content); // 遍历所有Employee节点,转换为Employee对象 List<Employee> employeeList = doc.Descendants(ns + "Employee") .Select(e => new Employee { Id = int.Parse(e.Element(ns + "Id").Value), Name = e.Element(ns + "Name").Value }) .ToList(); // 现在employeeList就是你需要的集合了 } }
方案二:使用XmlSerializer序列化
如果你的XML结构固定,这种方式更优雅,通过定义响应对应的实体类来自动映射:
首先,需要定义和XML结构匹配的响应实体类(注意要指定正确的命名空间):
[XmlRoot("GetEmployeeResponse", Namespace = "http://test.dev.com/")] public class GetEmployeeResponse { [XmlElement("PropertyStatus")] public PropertyStatus PropertyStatus { get; set; } } public class PropertyStatus { [XmlElement("Employee")] public List<Employee> Employees { get; set; } }
然后在请求方法中添加解析代码:
private void reqEmployee(Employee empl) { // 你的原有请求代码... IRestResponse response = client.Execute(request); // 开始序列化解析 if (!string.IsNullOrEmpty(response.Content)) { XmlSerializer serializer = new XmlSerializer(typeof(GetEmployeeResponse)); using (StringReader reader = new StringReader(response.Content)) { GetEmployeeResponse responseObj = (GetEmployeeResponse)serializer.Deserialize(reader); List<Employee> employeeList = responseObj.PropertyStatus.Employees; // 这里就得到了填充好的Employee集合 } } }
注意事项
- 一定要处理XML的默认命名空间(
http://test.dev.com/),不管是手动解析还是序列化,忽略命名空间会导致找不到对应的节点。 - 确保
Employee类的属性名称和XML节点名称完全匹配(比如XML里是<Id>,类里就是Id,大小写敏感)。
内容的提问来源于stack exchange,提问作者Chriz
相关产品推荐
相关产品推荐

