Pour notre projet Silverlight (SL4), j'utilise un modèle qui peut contenir des listes (IList<AnotherModel>
). Selon les règles de l'art et la règle CA2227:CollectionPropertiesShouldBeReadOnly , les propriétés IList
n'ont pas de paramètre public. Nous sérialisons le modèle en utilisant le DataContractSerializer qui fonctionne. Mais lorsque j'essaie de désérialiser, une exception SecurityException est levée par la méthode ReadObject(Stream)
de DataContractSerializer, se plaignant que la propriété target (pointant vers la propriété IList
) ne peut pas être définie en raison d'un paramètre public manquant.Silverlight: DataContractSerializer ne peut pas gérer les propriétés de collection en lecture seule
Depuis le DataContractSerializer
est scellé et ne extensible, ni souple, je vois actuellement donc aucune chance d'ajouter une sorte de règles supplémentaires qui permettent de désérialiser le ILists
en utilisant une boucle foreach sur la méthode Add()
ou une autre méthode de transfert des objets de collection . J'ai aussi essayé de creuser dans la source DataContractSerializer
(en utilisant Reflector) pour créer une petite fourche mais il semblerait que je devrais creuser très profondément et la réplication de classes entières de sérialisation ne semble pas être une solution viable.
Voyez-vous une autre chance de sérialiser une liste sans setter public en utilisant le DataContractSerializer
?
Merci beaucoup d'avance pour vos idées!
MISE À JOUR
résolu à l'aide XmlSerializer.
Thomas
Merci! (J'ai choisi une autre solution) – thmshd