如何不使用特性将XML反序列化为含嵌套对象的C#类
问题解决:无特性实现XML嵌套列表反序列化
问题原因
你当前的XmlAttributeOverrides配置存在两处关键错误:
- 错误地针对
List<HobbyDTO>类型配置,而非ManDTO类的Hobbies属性 XmlElementAttribute指定的元素名是类名HobbyDTO,但XML中实际的子元素标签是<Hobby>
修正后的代码
正确的反序列化代码
// 假设rootElementName变量值为"Man" XmlRootAttribute root = new XmlRootAttribute(rootElementName); XmlAttributes attribs = new XmlAttributes(); // 指定XML中每个列表项对应的元素名为"Hobby" attribs.XmlElements.Add(new XmlElementAttribute("Hobby")); XmlAttributeOverrides overrides = new XmlAttributeOverrides(); // 针对ManDTO类的Hobbies属性应用配置 overrides.Add(typeof(ManDTO), "Hobbies", attribs); var serializer = new XmlSerializer(typeof(ManDTO), overrides, new Type[] { typeof(HobbyDTO) }, root, "", ""); var result = (ManDTO)serializer.Deserialize(xml);
补充说明
- 后续若
<Hobby>元素添加属性或子节点,需确保HobbyDTO类的结构与之匹配 - 反序列化结果需强制转换为
ManDTO类型,避免隐式类型转换导致的类型错误
内容的提问来源于stack exchange,提问作者Zik
相关产品推荐
相关产品推荐

