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

如何用XmlSerializer将两个对象列表序列化为指定结构的XML文件?

使用XmlSerializer实现自定义根节点的XML结构

当然可以用XmlSerializer实现你想要的XML结构,核心思路是创建一个对应根节点<Objects>的类,将两个对象数组作为该类的属性,直接序列化这个根类就能得到目标格式。

实现步骤

1. 定义实体类

先定义对应XML元素的实体类,包括根节点类和两个对象类:

// 自定义Object1类,根据实际业务添加属性
public class Object1
{
    public string Prop1 { get; set; }
    public int Prop2 { get; set; }
}

// 自定义Object2类,根据实际业务添加属性
public class Object2
{
    public bool PropA { get; set; }
    public DateTime PropB { get; set; }
}

// 对应根节点<Objects>的类,包含两个对象数组属性
public class Objects
{
    // 默认序列化会生成<ArrayOfObject1>节点,内部是<Object1>元素
    public List<Object1> ArrayOfObject1 { get; set; }
    
    // 默认序列化会生成<ArrayOfObject2>节点,内部是<Object2>元素
    public List<Object2> ArrayOfObject2 { get; set; }
}

2. 执行序列化

初始化数据后,使用XmlSerializer序列化根类实例:

// 填充测试数据
var objectsData = new Objects
{
    ArrayOfObject1 = new List<Object1>
    {
        new Object1 { Prop1 = "示例值1", Prop2 = 10 },
        new Object1 { Prop1 = "示例值2", Prop2 = 20 }
    },
    ArrayOfObject2 = new List<Object2>
    {
        new Object2 { PropA = true, PropB = DateTime.Now },
        new Object2 { PropA = false, PropB = DateTime.Now.AddDays(-1) }
    }
};

// 创建XmlSerializer,指定根类类型
var serializer = new XmlSerializer(typeof(Objects));

// 将序列化结果写入文件(也可写入内存流等其他输出目标)
using (var streamWriter = new StreamWriter("output.xml"))
{
    serializer.Serialize(streamWriter, objectsData);
}

说明

  • 上述代码生成的XML结构完全符合你的需求:根节点为<Objects>,内部包含<ArrayOfObject1>和<ArrayOfObject2>子节点,每个子节点下对应多个<Object1>、<Object2>元素。
  • 如果需要自定义节点名称(比如修改ArrayOfObject1的名称),可以通过[XmlArray]和[XmlArrayItem]特性调整,示例如下:
    public class Objects
    {
        [XmlArray("Object1Collection")]
        [XmlArrayItem("SingleObject1")]
        public List<Object1> Object1List { get; set; }
    }
    
    但你的需求刚好匹配XmlSerializer的默认节点命名规则,因此无需额外配置特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:40:30