【问题标题】:Serialize List Elements in XML without class name在没有类名的 XML 中序列化列表元素
【发布时间】:2014-04-03 08:25:36
【问题描述】:

我下面的课:

public class Family
{
    public List<ChildAge> childAges { get; set; }
}

现在 ChildAge 看起来像这样:

public class ChildAge
{
    public int Age { get; set; }
}

当我将它序列化为 XML 时,我得到:

<root>
    <Family>
        <ChildAges>
            <ChildAge>
                <Age>10</Age>
            </ChildAge>
            <ChildAge>
                <Age>8</Age>
            </ChildAge>
        </ChildAges>
    </Family>
</root>

我需要改变什么才能得到这个:

<root>
    <Family>
        <ChildAges>
            <Age>10</Age>
            <Age>8</Age>
        </ChildAges>
    </Family>
<root>

谢谢!

【问题讨论】:

  • 为什么需要这个?您需要先提及它。

标签: c# xml list serialization


【解决方案1】:

一旦您在“childage”下有更多要序列化的属性,您的问题就会开始 您可以简单地使用列表和以下注释:

[XmlArray("ChildAges")]
[XmlArrayItem("Age")]
List<int> ChildrenAges { get; set; }

你已经完成了

【讨论】:

    【解决方案2】:

    您可以通过提供自己的 WriteXml 实现来做到这一点(以及更多)...

    请看下面这段代码。

    public class Family : IXmlSerializable
    {
        public List<ChildAge> childAges { get; set; }
    
        public void WriteXml(XmlWriter writer)
        {
            foreach(ChildAge ca in childAges)
                writer.WriteElementString("Age", ca.Age.ToString());
        }
    
        public void ReadXml(XmlReader reader)
        {
            // [...]
        }
    
        public XmlSchema GetSchema()
        {
            return (null);
        }
    }
    
    public class ChildAge
    {
        public int Age { get; set; }
    }
    
    public class Program
    {
        static void Main(string[] args)
        {
            Family f = new Family();
            f.childAges = new List<ChildAge>();
            f.childAges.Add(new ChildAge() { Age = 10 });
            f.childAges.Add(new ChildAge() { Age = 8 });
    
            XmlSerializer xs = new XmlSerializer(typeof(Family));
    
            XmlSerializerNamespaces xmlnsEmpty;
            xmlnsEmpty = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
    
            XmlWriterSettings writerSettings = new XmlWriterSettings();
            writerSettings.Indent = true;
            writerSettings.OmitXmlDeclaration = true;
    
            StringBuilder sb = new StringBuilder();
            XmlWriter writer = XmlTextWriter.Create(sb, writerSettings);
            xs.Serialize(writer, f, xmlnsEmpty);
    
            Console.WriteLine(sb.ToString());
            Console.ReadLine();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多