C#反序列化XML时忽略不同命名空间的问题求助
解决XML反序列化命名空间不匹配问题
问题核心是XML中的nzb元素带有命名空间http://www.newzbin.com/DTD/2003/nzb,但你的.NET类未配置对应命名空间,导致XmlSerializer无法正确解析元素映射。
修正类定义
给类和属性的XML特性添加匹配的命名空间参数:
[XmlRoot(ElementName = "nzb", Namespace = "http://www.newzbin.com/DTD/2003/nzb")] [XmlType("nzb", Namespace = "http://www.newzbin.com/DTD/2003/nzb")] public class Nzb { // 子元素file与根元素同属一个命名空间,需同步指定 [XmlElement(ElementName = "file", Namespace = "http://www.newzbin.com/DTD/2003/nzb")] public FileData[] Files { get; set; } = []; } // FileData作为子元素无需XmlRoot特性,若内部有子元素,同样要给对应XML特性加命名空间 public class FileData { }
可选:显式指定序列化器默认命名空间
如果上述修改后仍有问题,可在创建XmlSerializer时显式指定默认命名空间:
XmlSerializer serializer = new XmlSerializer(typeof(Nzb), "http://www.newzbin.com/DTD/2003/nzb"); Nzb? obj = null; using TextReader reader = new StringReader(File.ReadAllText(file)); obj = (Nzb)serializer.Deserialize(reader);
这样就能正确处理带命名空间的XML反序列化。
内容的提问来源于stack exchange,提问作者Snake Eyes
相关产品推荐
相关产品推荐

