C#如何反序列化XML到对象列表

技术百科 幻夢星雲 发布时间:2026-01-26 浏览:
XmlSerializer可将XML字符串反序列化为对象列表,需定义匹配的类结构并用包装类处理根容器;若XML无显式根,需手动包装或改用XDocu

ment+LINQ to XML。

XmlSerializer 可以直接将 XML 字符串反序列化为对象列表,关键在于类结构要与 XML 层级和命名匹配,并正确处理根容器元素。

定义匹配的类结构

XML 中若包含多个同级子元素(如 ),需用一个“包装类”表示根节点,再用泛型 List 或数组表示子项集合。

例如,有如下 XML:


  
    A1
    B2
  

对应类应为:

public class Root
{
    [XmlElement("Item")]
    public List Items { get; set; } = new();
}

public class Item
{
    public string Name { get; set; }
    public int Id { get; set; }
}

使用 XmlSerializer 反序列化

创建 XmlSerializer 实例时传入根类型(如 typeof(Root)),然后调用 Deserialize 方法读取 XML 流或字符串。

  • 从字符串反序列化:
var xml = @"A1";
var serializer = new XmlSerializer(typeof(Root));
using var reader = new StringReader(xml);
var root = (Root)serializer.Deserialize(reader);

// 获取对象列表:root.Items
  • 从文件反序列化:
using var fileStream = File.OpenRead("data.xml");
var root = (Root)serializer.Deserialize(fileStream);

处理常见问题

如果 XML 没有显式根容器(比如直接是多个 ),XmlSerializer 无法直接反序列化为 List,因为 XML 必须有且仅有一个根元素。

  • 方案一:手动包装成合法 XML(加一层根)
  • 方案二:改用 XDocument + LINQ to XML 手动映射(更灵活)

示例(LINQ to XML 方式):

var doc = XDocument.Parse(xmlString);
var items = doc.Root?.Element("Items")
    ?.Elements("Item")
    .Select(x => new Item
    {
        Name = x.Element("Name")?.Value,
        Id = int.TryParse(x.Element("Id")?.Value, out var i) ? i : 0
    })
    .ToList();

注意命名与特性标注

默认情况下,XmlSerializer 使用属性名作为 XML 元素名。若需自定义,可用以下特性:

  • [XmlElement("CustomName")]:指定元素名
  • [XmlAttribute("id")]:将属性映射为 XML 属性
  • [XmlRoot("Root")]:指定根元素名(用于类本身)
  • [XmlArray("Items")][XmlArrayItem("Item")]:更明确地控制集合的序列化格式


# 有一个  # 多个  # 常见问题  # 可将  # 可以直接  # 自定义  # 关键在于  # 再用  # 对象  # 泛型  # stream  # c#  # xml  # 字符串  # typeof  # 序列化  # 需用  # linq  # 正确处理 


相关栏目: <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 AI推广<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 SEO优化<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 技术百科<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 谷歌推广<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 百度推广<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 网络营销<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 案例网站<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 精选文章<?muma echo $count; ?>

相关推荐

在线咨询

点击这里给我发消息QQ客服

在线咨询

免费通话

24h咨询:4006964355


如您有问题,可以咨询我们的24H咨询电话!

免费通话

微信扫一扫

微信联系
返回顶部