Способ XmlInclude автоматически для всех производных классов? - PullRequest
1 голос
/ 21 января 2012

Очевидно, XmlSerializer работает гладко для объектов, если экземпляры не являются производными, в противном случае мне пришлось бы явно применить атрибут для включения определенных производных классов в базовый класс. У меня есть около 50+ производных классов и, возможно, еще больше в будущем, есть ли способ сказать XmlSerializer просто автоматически сериализовать производные части объекта и не мешать мне быть более явным с тем, что я хочу? Я просто хочу печатать меньше.

1 Ответ

0 голосов
/ 21 января 2012

Необходимость их указания объясняется в первую очередь сложностью необходимости десериализации их. В конце сериализации он может, в конце концов, пройтись по дереву наследования, чтобы найти информацию. Но подумайте о том, что вас попросили десериализовать Foo, но, получив <bar>, не сразу понятно, как определить тип.

XmlSerializer разумно хочет быть уверенным, что он может выполнять оба действия - так же, как он хочет получить открытый конструктор без параметров, прежде чем он будет сериализован, когда ясно, что сериализация не вызывает конструктор. Итак, в конечном итоге: нет - вам придется сказать это типам.

Обратите внимание, что это не означает, что вы можете использовать XmlIncludeAttribute - вы также можете предоставить эту информацию конструктору XmlSerializer (дополнительные типы). Тем не менее, в IMO удобнее использовать атрибутивный подход, и «меньше печатать», безусловно, не является веской причиной, чтобы не делать это таким образом. Кроме того, при использовании чего-либо, кроме конструктора XmlSerializer (Type), необходимо кэшировать сериализатор, чтобы предотвратить утечку сборок.

Я бы просто добавил атрибуты ...

...