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

C# List属性XML序列化优化:实现单Cards节点包含多Card子节点

调整C# XML序列化格式实现指定输出

问题背景

现有以下C#代码:

public class CardLogos
{
    [XmlElement("Card")]
    public string Card { get; set; }
}

public class P_M
{
    [XmlElement("Cards")]
    public List<CardLogos> Cards { get; set; }
}

构建对象的代码如下:

pm = new P_M();
// 其他属性赋值逻辑
pm.Cards = new List<CardLogos>();
pm.Cards.Add(new CardLogos() {Card="VISA"});
pm.Cards.Add(new CardLogos() {Card="AMEX"});
pm.Cards.Add(new CardLogos() {Card="DISCOVER"});

当前序列化后的XML输出为:

<P_M>
    <Other Properties/>
    <Cards>
        <Card>VISA</Card>
    </Cards>
    <Cards>
        <Card>AMEX</Card>
    </Cards>
    <Cards>
        <Card>DISCOVER</Card>
    </Cards>
</P_M>

期望得到的XML格式为:

<P_M>
    <Other Properties/>
    <Cards>
        <Card>VISA</Card>
        <Card>AMEX</Card>
        <Card>DISCOVER</Card>
    </Cards>
</P_M>

解决方案

只需修改P_M类中Cards属性的序列化特性,将原来的[XmlElement("Cards")]替换为[XmlArray("Cards")]和[XmlArrayItem("Card")]组合:

public class CardLogos
{
    public string Card { get; set; }
}

public class P_M
{
    [XmlArray("Cards")]
    [XmlArrayItem("Card")]
    public List<CardLogos> Cards { get; set; }
}

说明

  • [XmlArray("Cards")]:指定生成一个名为<Cards>的父容器节点,用来包裹所有子元素。
  • [XmlArrayItem("Card")]:指定容器内每个子元素的节点名为<Card>,同时可以去掉CardLogos类上的[XmlElement("Card")]特性,避免重复定义。

这样序列化后就能得到你期望的XML结构,所有<Card>节点都会被包含在同一个<Cards>容器下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:47:39