У меня очень странное исключение в моем приложении C#: при попытке десериализации класса, содержащего общий List<IListMember>
(где записи списка указаны интерфейсом), исключение генерирует отчет о том, что «тип ... IListMember не помечен сериализуемым атрибутом» (фраза может быть немного иной, мой VisualStudio не на английском языке).Исключение: исключение
Теперь интерфейсы не могут быть Serializable; класс, фактически содержащийся в списке, реализующий IListMember, :[Serializable]
; и да, я проверил, что IListMember
на самом деле определяется как интерфейс, а не случайно как класс!
Я попытался воспроизвести исключение в отдельном тестовом проекте содержится только класс, содержащий список и членов, но там она упорядочивает и десериализует счастливо:/
Кто-нибудь есть хорошие идеи о том, что это может быть ?
Edit:
Мы используем BinarySerializer
; и я повторяю, что при извлечении в тестовый проект класс сериализуется счастливо. Поэтому мне не нужно обходное решение для сериализации класса, содержащего List<IThing>
, так как в целом это работает отлично (если фактические классы, реализующие IThing
, сериализуемы); то, что я ищу, это причины, почему это может не работы именно это время ...
я теперь положить в обходном пути (Сериализация каждого элемента списка по отдельности, вместе с количеством записей, и воссоздающие List
по), но очень хотелось бы узнать, что это может быть для будущей справки.
Какой сериализатор вы используете? 'BinaryFormatter'? 'XmlSerializer'? 'DataContractSerializer'? «Домашний органический сериализатор Боба»? Также есть ли какие-либо «события»? –
См. Мое редактирование; и да, есть события, связанные где-то вдоль линии, ведущей к вызову binaryFormatter.Deserialize; вы видите какую-либо связь? –
Интерфейс используется для определения того, может ли класс сказать, что он может быть сериализован, если у вас есть список ссылок на основе интерфейса, где интерфейс не помечен как сериализуемый, возможно, код сериализации пытается сказать вам, что вы можете потенциально объекты здесь, с которыми он не может справиться? Даже если ваш текущий график объектов A-OK. –