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

如何在C#中解析含重复标签名的XML并提取AccessKey列表?

解决XML解析中多个元素无法正确映射为List的问题

这个问题我之前也碰到过,核心原因是你的AccessKeyData类的字段映射逻辑和目标XML结构不匹配,导致多元素场景下解析失败。下面给你两种可行的解决办法:

方法一:直接使用List<string>(推荐)

既然你的XML里<AccessKey>节点直接存储文本值,完全不需要额外的AccessKeyData类,直接用List<string>配合特性标记就能完美解析:

[XmlRoot("Project")]
public class Project
{
    // XmlArray指定外层的<AccessKeys>容器节点
    // XmlArrayItem指定每个子节点的名称为<AccessKey>,类型为string
    [XmlArray("AccessKeys"), XmlArrayItem("AccessKey")]
    public List<string> AccessKeys { get; set; } = new List<string>();
}

这种写法不管XML里是单个还是多个<AccessKey>元素,都能正确映射到AccessKeys列表中。

方法二:保留AccessKeyData类并调整映射逻辑

如果因为某些原因必须保留AccessKeyData类,你需要修改类的字段标记,让它对应<AccessKey>节点的文本内容,而不是生成嵌套子元素:

[XmlRoot("Project")]
public class Project
{
    [XmlArray("AccessKeys"), XmlArrayItem(typeof(AccessKeyData), ElementName = "AccessKey")]
    public List<AccessKeyData> AccessKeys { get; set; } = new List<AccessKeyData>();
}

[Serializable]
public class AccessKeyData
{
    // 使用[XmlText]标记,让这个字段对应节点的文本内容
    [XmlText]
    public string Value { get; set; }
}

原代码中AccessKeyData的AccessKey字段没有标记,默认会被序列化为<AccessKey><AccessKey>xxx</AccessKey></AccessKey>这种嵌套结构,和你的XML格式不符,所以多元素时解析失败。加上[XmlText]后就能正确匹配节点文本了。

测试解析代码

你可以用下面的代码验证解析效果:

string xmlContent = @"<Project>
  <AccessKeys>
    <AccessKey>key_1</AccessKey>
    <AccessKey>key_2</AccessKey>
  </AccessKeys>
</Project>";

XmlSerializer serializer = new XmlSerializer(typeof(Project));
using (StringReader reader = new StringReader(xmlContent))
{
    Project result = (Project)serializer.Deserialize(reader);
    // 此时result.AccessKeys会包含两个元素,分别对应key_1和key_2
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:34:06