使用多态成员序列化对象时,表示该成员的xml元素会自动接收xsi:type属性,该属性指定实际类型的名称。 从理论上讲,这可以帮助实现反序列化,但是不幸的是,这通常是相反的,如此处所述(问题无关,请看JaedenRuiner的回答):XmlSerializer replace xsi:type to node name
在我的情况下,我需要将序列化的对象发送到架构完全不同的外部应用程序,而且我使用的类型名称只会给混乱带来麻烦。
示例类别:
{
tabBarOptions: {
activeTintColor: 'black',
inactiveTintColor: 'black',
style: {
backgroundColor: 'yellow',
width: 300
},
tabStyle: {
width: 100
}
}
}
和序列化:
public class Foo
{
public Bar Bar { get; set; }
}
public abstract class Bar
{ }
public class Baz : Bar
{ }
结果:
public void FooTest()
{
var foo = new Foo { Bar = new Baz() };
var xDoc = new XDocument();
XmlSerializer objSerializer = new XmlSerializer(typeof(Foo), new System.Type[] { typeof(Baz) });
using (XmlWriter writer = xDoc.CreateWriter())
{
objSerializer.Serialize(writer, foo);
}
Console.WriteLine(xDoc.Root);
Console.ReadKey();
}
我可以以某种方式停止生成此<Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Bar xsi:type="Baz" />
</Foo>
属性吗?