显然,如果没有派生实例,XmlSerializer可以顺利地处理对象,否则我必须显式地应用一个属性来将特定的派生类包含到基类中。我有大约50多个派生类,将来可能会有更多,是否有办法告诉XmlSerializer只是自动序列化对象的派生部分而不是麻烦我对我想要的更明确?我只想减少打字。
答案 0 :(得分:0)
由于必须对它们进行反序列化的复杂性,因此需要指定它们。毕竟,在序列化时,它可以遍历继承树以查找信息。但是考虑被要求反序列化Foo
,但获得<bar>
并不是很明显如何解决该类型。
XmlSerializer明智地希望确保它可以执行这两个操作 - 就像它在序列化之前想要一个公共无参数构造函数一样,当清楚序列化不会调用构造函数时。所以最终:不 - 你将不得不告诉它类型。
请注意,这并不意味着您使用XmlIncludeAttribute是红色的 - 您还可以将此信息提供给XmlSerializer构造函数(额外类型)。但是,IMO使用属性方法更方便,“少打字”当然不是不这样做的好理由。此外,如果使用除XmlSerializer(Type)构造函数之外的任何其他内容,则需要缓存序列化程序以防止泄漏程序集。
我只是添加属性......