c# XML 序列化 - 动态元素名称
c# XML serialization - dynamic element name
我当前的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</Line>
</Child>
</Parent>
Parent class 代码包含 属性:
[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>
即当 Child 设置了一些特殊标志时,应该更改它的名称,并打印一些其他文本。 Child 已经知道根据标志打印什么文本。
但是现在更改元素名称的最佳选择是什么?
我认为你应该能够为此使用继承:
[XmlElement("Child", typeof(Child))]
[XmlElement("SpecialChild", typeof(SpecialChild))]
public List<Child> Childrens { get; set; }
和
public class SpecialChild : Child {...}
但是:如果没有继承,它本身不受支持,您需要执行手动序列化。
编辑:确认,工作正常:
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 { }
我当前的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</Line>
</Child>
</Parent>
Parent class 代码包含 属性:
[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>
即当 Child 设置了一些特殊标志时,应该更改它的名称,并打印一些其他文本。 Child 已经知道根据标志打印什么文本。
但是现在更改元素名称的最佳选择是什么?
我认为你应该能够为此使用继承:
[XmlElement("Child", typeof(Child))]
[XmlElement("SpecialChild", typeof(SpecialChild))]
public List<Child> Childrens { get; set; }
和
public class SpecialChild : Child {...}
但是:如果没有继承,它本身不受支持,您需要执行手动序列化。
编辑:确认,工作正常:
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 { }