Для нашего проекта Silverlight (SL4) я использую модель, которая может содержать списки (IList<AnotherModel>
). В соответствии с хорошей практикой и правилом CA2227: CollectionPropertiesShouldBeReadOnly
свойства IList
не имеют открытого сеттера. Мы сериализуем модель, используя DataContractSerializer, который работает. Но когда я пытаюсь десериализовать, SecurityException генерирует метод ReadObject(Stream)
DataContractSerializer, жалуясь, что целевое свойство (указывающее на свойство IList
) не может быть установлено из-за отсутствия общедоступного установщика.
Поскольку DataContractSerializer
является запечатанным и не расширяемым и не гибким, поэтому в настоящее время я не вижу возможности добавить какие-то дополнительные правила, которые позволяют десериализовать ILists
, используя цикл foreach для метода Add()
или какой-либо другой метод. передачи предметов коллекции.
Я также пытался покопаться в DataContractSerializer
источнике (используя Reflector) для создания небольшого разветвления, но похоже, что мне нужно копать очень глубоко, и репликация целых классов сериализации не представляется жизнеспособным решением. .
Видите ли вы еще один шанс сериализовать Список без публичного установщика, используя DataContractSerializer
?
Большое спасибо заранее за ваши идеи!
UPDATE
Решено с помощью XmlSerializer.
Thomas