我需要序列化与此相关的类:
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
。
我也必须反过来这样做。
有没有办法实现这个目标?
答案 0 :(得分:1)
您可能想要探索使用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检查this
的更多信息