可以强制序列化器不生成xsi:type属性吗?

时间:2019-02-08 18:06:28

标签: c# xml-serialization xmlserializer

使用多态成员序列化对象时,表示该成员的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> 属性吗?

0 个答案:

没有答案