XML反序列化报错InvalidOperationException:<result xmlns=''>不符合预期的原因及解决办法
错误原因
- XML返回的根节点是
<result>,但你用来反序列化的根类是ListCategories,XmlSerializer默认要求XML根节点名称和类名完全一致(即期望<ListCategories>),两者不匹配导致抛出该异常。 - XML中的子节点是
<category>,但你的ListCategories类里的集合属性是CategoriesList,默认序列化/反序列化时会生成<CategoriesList>作为集合的包裹节点,和XML里直接在<result>下排列<category>的结构不匹配,这也会导致反序列化失败。
解决办法
修改类定义,通过XML序列化特性匹配XML结构:
[Serializable] [XmlRoot("result")] // 指定根节点名称为result public class ListCategories { // 指定集合中的每个元素对应XML里的<category>节点,无需包裹节点 [XmlElement("category")] public List<Categories> CategoriesList { get; set; } = new List<Categories>(); } [Serializable] public class Categories { public int id { get; set; } public int parent_id { get; set; } public string name { get; set; } public string image { get; set; } public Categories() { } public Categories(int id, int parent_id, string name, string image) { this.id = id; this.parent_id = parent_id; this.name = name; this.image = image; } }
修改后,XmlSerializer会正确识别XML的<result>根节点,同时将每个<category>节点映射到CategoriesList集合里的Categories对象。
另外要确保XML文件里<category>的子元素名称(如<id>、<parent_id>等)和Categories类的属性名完全一致,XML序列化默认区分大小写。
内容的提问来源于stack exchange,提问作者Vladimir Platun
相关产品推荐
相关产品推荐

