Ok, j'ai réussi à faire fonctionner DataContractSerializer avec mon graphe d'objets. Voir mes questions précédentes pour plus d'informations.
Sérialisation / dérialisation d'une structure arborescente
Le désérialiseur n'a pas connaissance d'un type qui correspond à ce contrat.
Cependant, l'un de mes domaines, _UserPropertyDefinitions est défini comme indiqué ci-dessous. Il définit une liste de propriétés personnalisées que cet utilisateur peut ajouter aux objets de la structure de données. La chaîne est une clé unique pour identifier la propriété, et le Type est le type de la propriété qui est toujours un type primitif comme Bool, Int, String etc etc
À chaque objet correspond un Dictionary(String key, Object value) pour stocker les valeurs qu'il a définies pour l'une des "propriétés de l'utilisateur".
[DataMember]
private Dictionary<string, Type> _UserPropertyDefinitions;
Mon graphe d'objets se sérialise bien lorsque cette propriété est une collection vide, mais dès que j'ajoute une propriété personnalisée à cette collection, j'obtiens l'exception suivante lorsque j'essaie de la sérialiser avec DataContractSerializer.
Type 'System.RuntimeType' avec données nom du contrat 'RuntimeType : http://schemas.datacontract.org/2004/07/System ' n'est pas attendu. Ajoutez tout type non connu statiquement à la liste des types connus - par exemple, en utilisant la méthode KnownTypeAttribute ou en utilisant l'attribut en les ajoutant à la liste des types connus transmise à DataContractSerializer.
Si je supprime l'attribut DataMember de ce champ, je peux effectuer une sérialisation/désérialisation sans obtenir d'exception, mais je perds bien sûr les paramètres que j'ai créés dans ce champ.