You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#反序列化XML文件时触发System.InvalidOperationException异常

解决C# XML反序列化异常问题

问题原因

当前代码存在两个关键错误:

  1. [XmlRoot("Users")]特性被错误添加到User类上,但实际要反序列化的是List<User>集合,该特性对集合无效。
  2. 默认情况下,XmlSerializer处理List<User>时预期根节点为<ArrayOfUser>,但你的XML文件根节点是<Users>,结构不匹配导致抛出异常。

解决方案

方案一:创建根类匹配XML结构

定义包含User列表的根类,将[XmlRoot("Users")]特性添加到该类,并通过[XmlElement("User")]标记列表属性,确保XML中的<User>元素被正确映射:

namespace Biftek
{
    [XmlRoot("Users")]
    public class UserList
    {
        [XmlElement("User")]
        public List<User> Users { get; set; } = new List<User>();
    }

    public class User
    {
        public string username { get; set; }
        public string password { get; set; }
    }

    public class UserManager
    {
        public static List<User> Load(string path)
        {
            List<User> users = new List<User>();
            if (File.Exists(path))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(UserList));
                using (XmlReader reader = XmlReader.Create(path))
                {
                    var userList = (UserList)serializer.Deserialize(reader);
                    users = userList.Users;
                }
            }
            return users;
        }
    }
}

方案二:直接指定序列化器的根节点

无需创建新类,实例化XmlSerializer时通过XmlRootAttribute指定根节点名称为Users,同时给User类添加[XmlElement("User")]特性,确保集合元素对应XML中的<User>标签:

namespace Biftek
{
    [XmlElement("User")]
    public class User
    {
        public string username { get; set; }
        public string password { get; set; }
    }

    public class UserManager
    {
        public static List<User> Load(string path)
        {
            List<User> users = new List<User>();
            if (File.Exists(path))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(List<User>), new XmlRootAttribute("Users"));
                using (XmlReader reader = XmlReader.Create(path))
                {
                    users = (List<User>)serializer.Deserialize(reader);
                }
            }
            return users;
        }
    }
}

两种方案均可解决根节点不匹配的问题,任选其一即可。

内容的提问来源于stack exchange,提问作者StraleS02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:33:25