如何用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]特性调整,示例如下:
但你的需求刚好匹配XmlSerializer的默认节点命名规则,因此无需额外配置特性。public class Objects { [XmlArray("Object1Collection")] [XmlArrayItem("SingleObject1")] public List<Object1> Object1List { get; set; } }
内容的提问来源于stack exchange,提问作者steeb3776
相关产品推荐
相关产品推荐

