如何在C#中反序列化包含嵌套相同节点的XML字符串
将XML反序列化为C#对象的实现步骤
首先根据你的XML结构定义对应的C#类,确保匹配XML的节点和属性:
using System.Xml.Serialization; // 对应根节点<n-hierarchy> [XmlRoot("n-hierarchy")] public class NHierarchy { // 根节点下的所有<n>节点 [XmlElement("n")] public List<NNode> Nodes { get; set; } = new List<NNode>(); } // 单个<n>节点的类定义 public class NNode { // 匹配name属性 [XmlAttribute("name")] public string Name { get; set; } // 匹配n_id属性 [XmlAttribute("n_id")] public string NId { get; set; } // 嵌套的子<n>节点 [XmlElement("n")] public List<NNode> ChildNodes { get; set; } = new List<NNode>(); }
然后使用XmlSerializer完成反序列化操作:
using System.IO; using System.Xml.Serialization; public static NHierarchy DeserializeXml(string xmlString) { var serializer = new XmlSerializer(typeof(NHierarchy)); using (var reader = new StringReader(xmlString)) { return (NHierarchy)serializer.Deserialize(reader); } } // 调用示例 string xmlContent = @"<n-hierarchy> <n name=""ABC"" n_id=""971"" /> <n name=""XYZ"" n_id=""972""> <n name=""jkl"" n_id=""973""> <n name=""wer"" n_id=""974""/> <n name=""cvb"" n_id=""975""/> </n> </n> </n-hierarchy>"; NHierarchy result = DeserializeXml(xmlContent);
关键注意点
- 类的属性与XML的属性/节点名称大小写完全匹配,否则无法正确映射
- 如果XML包含命名空间,需要在
XmlRoot和XmlElement特性中添加Namespace参数指定 - 实际使用时建议添加异常处理,捕获XML格式错误、类型不匹配等问题
内容的提问来源于stack exchange,提问作者VInayK
相关产品推荐
相关产品推荐

