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

