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

C#继承List类实现XML序列化时如何自定义元素节点名?

解决C#继承List类的XML序列化自定义元素节点名问题

方法1:使用特性直接标记类

给继承List<string>的类添加[XmlElement]特性,直接指定自定义的元素节点名:

using System.Collections.Generic;
using System.Xml.Serialization;

[XmlElement("CustomItem")]
public class CustomStringList : List<string> { }

序列化示例代码:

var list = new CustomStringList { "Value1", "Value2" };
var serializer = new XmlSerializer(typeof(CustomStringList));
using var writer = new StringWriter();
serializer.Serialize(writer, list);
Console.WriteLine(writer.ToString());

输出XML结构:

<CustomStringList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <CustomItem>Value1</CustomItem>
  <CustomItem>Value2</CustomItem>
</CustomStringList>

方法2:使用XmlAttributeOverrides动态指定(适合无法修改类源码的场景)

如果不能修改继承List<string>的类的源码,可以通过XmlAttributeOverrides在创建序列化器时动态覆盖元素节点名:

using System.Collections.Generic;
using System.Xml.Serialization;

public class CustomStringList : List<string> { }

// 配置序列化规则
var attributeOverrides = new XmlAttributeOverrides();
var xmlAttributes = new XmlAttributes();
xmlAttributes.XmlElements.Add(new XmlElementAttribute("CustomItem"));
attributeOverrides.Add(typeof(CustomStringList), xmlAttributes);

// 创建自定义序列化器并执行序列化
var serializer = new XmlSerializer(typeof(CustomStringList), attributeOverrides);
var list = new CustomStringList { "Value1", "Value2" };
using var writer = new StringWriter();
serializer.Serialize(writer, list);
Console.WriteLine(writer.ToString());

输出结果与方法1完全一致,元素节点名为<CustomItem>。

以上两种方法均无需实现IXmlSerializable接口,可直接实现案例C编码方式下得到案例B序列化结果的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:32:08