C# c XML序列化-动态元素名称
我当前的XML结构是:C# c XML序列化-动态元素名称,c#,xml,xml-serialization,C#,Xml,Xml Serialization,我当前的XML结构是: <Parent> <Child> <Line id="1">Something</Line> <Line id="2">Something</Line> </Child> <Child> <Line id="1">Something else</Line> <Line id="2">Something else&
<Parent>
<Child>
<Line id="1">Something</Line>
<Line id="2">Something</Line>
</Child>
<Child>
<Line id="1">Something else</Line>
<Line id="2">Something else</Line>
</Child>
</Parent>
父类代码包含属性:
[XmlElement("Child")]
public List<Child> Childrens { get; set; }
现在,我希望将此更改为:
<Parent>
<Child>
<Line id="1">Something</Line>
<Line id="2">Something</Line>
</Child>
<SpecialChild>
<Line id="1">Some other text</Line>
<Line id="2">Some other text</Line>
</SpecialChild>
</Parent>
也就是说,当孩子有一些特殊的标志设置,它的名称应该改变,并打印一些其他文本。根据标志,子项已经知道要打印的文本
但是现在更改元素名称的最佳选项是什么?我认为您应该能够使用继承来实现这一点:
[XmlElement("Child", typeof(Child))]
[XmlElement("SpecialChild", typeof(SpecialChild))]
public List<Child> Childrens { get; set; }
但是:如果没有继承,它本机不受支持,您需要执行手动序列化
编辑:已确认,工作正常:
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
class Program
{ static void Main()
{
var ser = new XmlSerializer(typeof(Parent));
var obj = new Parent
{
Childrens = {
new Child { },
new SpecialChild { },
}
};
ser.Serialize(Console.Out, obj);
}
}
public class Parent
{
[XmlElement("Child", typeof(Child))]
[XmlElement("SpecialChild", typeof(SpecialChild))]
public List<Child> Childrens { get; } = new List<Child>();
}
public class Child { }
public class SpecialChild : Child { }
我在子元素上添加了一个属性,比如类型:Normal,Special。
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
class Program
{ static void Main()
{
var ser = new XmlSerializer(typeof(Parent));
var obj = new Parent
{
Childrens = {
new Child { },
new SpecialChild { },
}
};
ser.Serialize(Console.Out, obj);
}
}
public class Parent
{
[XmlElement("Child", typeof(Child))]
[XmlElement("SpecialChild", typeof(SpecialChild))]
public List<Child> Childrens { get; } = new List<Child>();
}
public class Child { }
public class SpecialChild : Child { }