У меня есть очень странное исключение в моем приложении на C #: при попытке десериализации класса, содержащего универсальный List<IListMember>
(где записи списка определяются интерфейсом), генерируется исключение, сообщающее, что «тип ... IListMember» не помечен атрибутом serializable "(формулировка может немного отличаться, мой VisualStudio не на английском языке).
Теперь интерфейсы не могут быть Serializable; класс, фактически содержащийся в списке, реализующий IListMember, равен [Serializable]
; и да, я проверил, что IListMember
на самом деле определяется как интерфейс, а не случайно как класс!
Я пытался воспроизвести исключение в отдельном тестовом проекте, содержащем только класс, содержащий список и члены, но там он успешно сериализуется и десериализуется: /
У кого-нибудь есть хорошие идеи о том, что это может быть?
Edit:
Мы используем BinarySerializer
; и я повторяю, при извлечении в тестовый проект класс сериализуется счастливо. Поэтому мне не нужен обходной путь для сериализации класса, содержащего List<IThing>
, так как в целом это работает нормально (если фактические классы, реализующие IThing
, являются сериализуемыми); я ищу причины, по которым не может работать именно в это время ...
Я сейчас ввел обходной путь (сериализация каждого члена списка по отдельности вместе с количеством записей и воссоздание List
вручную), но очень хотел бы выяснить, что это может быть для дальнейшего использования.