[英]Deserialize multiple XML elements with the same name through XmlSerializer class in C#
[英]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.