簡體   English   中英

在沒有類名的情況下以XML序列化列表元素

[英]Serialize List Elements in XML without class name

我下面的課:

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>

謝謝!

您可以通過提供自己的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();
    }
}

一旦在“子項”下有更多要序列化的屬性,您的問題就會開始,您只需使用列表和以下注釋即可:

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

你已經完成了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM