позволяет начать эту нить с кучей предположений:
первого предположения: у нас есть библиотека (* .dll), который содержит следующий код:сериализации производные (неизвестные) типы
class Program {
static void Main(string[] args) {
XmlSerializer ser = new XmlSerializer(typeof(Foo));
}
}
public class Foo { public string name;}
второе предположение: мы получил класс, который происходит от Foo, давайте назовем его Bar.
public class Bar : Foo { }
Этот класс расположен за пределами библиотеки.
Теперь наступает волшебство: класс Bar загружается через Reflection, поэтому мы не знаем его существования во время компиляции. Также XmlSerializer
ничего не знает о производном классе, и поскольку мы находимся в совершенно другой библиотеке, мы не можем просто добавить XmlInclude
, потому что мы не можем изменить код класса Foo
. Итак, есть ли способ использовать существующий XmlSerializer
на экземпляре класса Bar
(я знаю, что по текущей реализации ser
не будет вообще видимым для любого внешнего кода, но позволяет отложить это и предположить, что мы МОЖЕТ получить доступ сериализатор из класса Bar
)?
Может ли это быть достигнуто путем использования атрибутов к классу Bar
([System.Xml.Serialization ...] перед определением класса)?
Спасибо за ответ. Но, как я уже указывал, Сериализатор, который я хочу использовать, уже существует в библиотеке. Сказав это, я не могу повторно объявить его с новым типом-атрибутом. – HimBromBeere
Вы уже передаете его во время выполнения: Foo. typeof просто генерирует аргумент во время компиляции, XmlSerializer все еще создается во время выполнения с этим аргументом типа. Вам нужно будет использовать GetType(), чтобы получить тип времени выполнения. –