簡體   English   中英

使用XmlSerializer對具有相同名稱和遞增編號的多個元素進行XML序列化/反序列化

[英]Serialize/deserialize XML with multiple elements with same name and incrementing number using XmlSerializer

我需要序列化與此相關的類:

public class Root {
    public string[] Elements {get;set;}
}

到這樣的XML:

<?xml version="1.0" encoding="utf-8"?>
<Root>
    <Element_01>1st element</Element_01>
    <Element_02>2nd element</Element_02>
    <Element_03>3rd element</Element_03>
    <Element_04>4th element</Element_04>
</Root>

實例化對象時,如下所示:

var root = new Root {
    Elements = new[] {
        "1st element", "2nd element", "3rd element"
        "4th element"
    }
};

使用System.Xml.Serialization.XmlSerializer 我也必須反過來做。

有什么辦法可以做到這一點?

您可能想探索使用XLinq的另一種方法,對於您的特定情況,它會變得更簡單,更簡單,請看一下如何重寫Root類:

public class Root
{
    public string[] Elements { get; set; }

    public string GetXmlString()
    {
        var rootElement = new XElement("Root");
        for (var i = 0; i < Elements.Length; i++)
        {
            var tag = $"Element_{(i + 1).ToString().PadLeft(2, '0')}";
            var xElement = new XElement(tag, Elements[i]);
            rootElement.Add(xElement);
        }

        return rootElement.ToString();
    }

    public static Root DeserializeXmlString(string xmlString)
    {
        var rootElement = XElement.Parse(xmlString);
        var elementsArray = rootElement
            .Elements()
            .Select(xElement => xElement.Value)
            .ToArray();

        return new Root {Elements = elementsArray};
    }
}

並測試:

private static void Main()
        {
            var root = new Root
            {
                Elements = new[]
                {
                    "1st element", "2nd element", "3rd element", "4th element"
                }
            };
            var xmlString = root.GetXmlString();
            Console.WriteLine(xmlString);

            var deserializedRoot = Root.DeserializeXmlString(xmlString);
            foreach (var element in deserializedRoot.Elements)
                Console.WriteLine(element);

            Console.ReadLine();
        }

結果: 在此處輸入圖片說明

您只需要添加錯誤驗證代碼,就可以完成很多工作。 有關LINQ to XML的更多信息,請檢查

暫無
暫無

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

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