При создании XML из этого кода:
internal class Program
{
public static void Main(string[] args)
{
using (StreamWriter myWriter = new StreamWriter(@"C:\Users\tomas\Documents\foo.xml", false))
{
var myFoo = new Foo();
myFoo.Bar = new BarChildOne();
XmlSerializer mySerializer = new XmlSerializer(typeof(Foo));
mySerializer.Serialize(myWriter, myFoo);
}
}
}
public class Foo
{
public BarBase Bar { get; set; }
}
[XmlInclude(typeof(BarChildOne))]
[XmlInclude(typeof(BarChildTwo))]
public abstract class BarBase
{
public string Name { get; set; }
}
[XmlRoot(ElementName = "BarChildOne")]
public class BarChildOne : BarBase
{
public BarChildOne()
{
this.Name = "BarChildOne";
}
}
[XmlRoot(ElementName = "BarChildTwo")]
public class BarChildTwo : BarBase
{
public BarChildTwo()
{
this.Name = "BarChildTwo";
}
}
Создается такой XML-код:
<?xml version="1.0" encoding="utf-8"?>
<Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Bar xsi:type="BarChildOne">
<Name>BarChildOne</Name>
</Bar>
</Foo>
Однако я хочу, чтобы имя элемента было BarChildOne , как определено с помощью в дочернем классе, а не Бар .
Ток: <Bar xsi:type="BarChildOne">
Ожидаемый: <BarChildOne>
Еслипроизводный класс - BarChildTwo
, тогда ожидаемое имя - <BarChildTwo>
.
Возможно ли это со встроенным сериализатором XML?