J'utilise WCF DataContractSerializer pour sérialiser et désérialiser un graphe d'objets volumineux dans mon application. Mon problème est que si j'ai une collection qui est initialisée sur la déclaration de champ, le DataContractSerializer n'exécute pas cette initialisation, et la collection se termine par null.Initialisation de la collection lors de la création d'un objet à partir de XMLSerializer
Par exemple:
class Test
{
List<string> collection = new List<string>();
public List<string> Collection
{
get { return collection; }
}
}
Après sérialisation et désérialisation cette classe, la collection sera nulle au lieu de la valeur par défaut nouvelle. Si je déplace l'initialisation dans la propriété get, cela fonctionne bien.
Puisque j'ai un très grand graphe d'objets, passer par tous les endroits où cela se passe prend du temps. Je préférerais qu'il y ait un moyen de le faire automatiquement d'une manière ou d'une autre. Mise à jour: J'utilise le DataContractSerializer WCF, donc je suppose que c'est la raison pour laquelle il n'initialise pas la collection.
Le sérialiseur XML standard peut-il gérer les références récursives comme celles que j'ai dans mon entité?
Mise à jour: Ok, maintenant je suis coincé ... pour être plus précis, les entités sont utilisées pour NHibernate, donc elles ont DataContract/DataMember sur elles. Mais alors j'utilise IList pour les propriétés BelongsTo/HasMany, et XMLSerializer ne les sérialise pas non plus, et avec les références non récursives, c'est non. Donc, en supposant que nous ayons une classe qui utilise IList, et qui a des références récursives, y a-t-il un moyen de la sérialiser/désérialiser et d'exécuter les constructeurs d'objets par défaut?
Mise à jour: a fait plus de tests, on dirait que je vais devoir créer un hybride de mon propre, comme NH nécessite l'IList, ce qui me limite à DCS, et son tag le long des problèmes ...
Cela devrait fonctionner de cette façon, dans mon application, je fais de même. – codymanix