如何在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
相关产品推荐
相关产品推荐

