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

C# Xml序列化:定义含重复元素数组的属性类问题

解决XML多重复元素的属性类定义问题

嘿,我来帮你搞定这个WebService里的XML序列化属性类定义问题!你的核心困惑在于如何让多个<Type3>元素直接出现在<Parent>节点下,而不是被包裹在一个数组容器里,咱们一步步来解决:

首先,先明确你要匹配的XML结构:

<Parent>
  <Type1>int</Type1>
  <Type2>string</Type2>
  <Type3>Object</Type3>
  <Type3>Object</Type3>
  <Type3>Object</Type3>
  <Type3>Object</Type3>
</Parent>

这里的<Type3>是直接作为<Parent>的同级子元素重复出现的,而不是嵌套在类似<Type3s>这样的容器节点里——这就是你之前用[XmlArray]不对的原因,因为[XmlArray]会自动生成一个包裹容器,不符合你的需求。

正确的属性类定义代码

直接把List类型的属性标记为[XmlElement("Type3")]就可以了,完整代码如下:

[XmlRoot("Parent")]
public class Parent
{
    [XmlElement("Type1")]
    public int Type1 { get; set; }

    [XmlElement("Type2")]
    public string Type2 { get; set; }

    // 关键:用XmlElement特性标记List,生成多个同级的<Type3>元素
    [XmlElement("Type3")]
    public List<YourObjectType> Type3Items { get; set; } = new List<YourObjectType>();
}

关键说明

  • 对于单个出现的元素(Type1、Type2),用[XmlElement]标记完全没问题,序列化后会直接生成对应的节点。
  • 对于重复的<Type3>元素,绝对不能用[XmlArray]——它会生成类似<Type3Items><Type3>...</Type3></Type3Items>的嵌套结构,和你的目标XML不符。而用[XmlElement("Type3")]标记List属性时,XML序列化器会直接在<Parent>节点下生成多个同级的<Type3>元素,完美匹配你要的结构。

测试序列化效果

如果你实例化这个类并序列化,比如:

var parent = new Parent
{
    Type1 = 123,
    Type2 = "Hello WebService",
    Type3Items = new List<YourObjectType>
    {
        new YourObjectType(),
        new YourObjectType(),
        new YourObjectType(),
        new YourObjectType()
    }
};

var serializer = new XmlSerializer(typeof(Parent));
using var writer = new StringWriter();
serializer.Serialize(writer, parent);
var outputXml = writer.ToString();

生成的XML就会和你给出的结构完全一致,多个<Type3>直接放在<Parent>下面。

记得把代码里的YourObjectType替换成你实际使用的对象类型(比如自定义的实体类)哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:36:56