Sérialiser / désérialiser des objects – l’ordre des champs est-il important?

Est-il possible que DataContractSerializer désérialise à tort un object si les champs ne sont pas dans l’ordre “correct” (peu importe ce que cela signifie)?

Les classes que j’essaie de sérialiser / désérialiser ne possèdent pas d’atsortingbuts de commande placés sur des champs / propriétés. Pourtant, l’un de mes champs est toujours désérialisé en tant que null même s’il possède une valeur non nulle (il contient en fait une liste de chaînes).

Lorsque j’ai déplacé deux éléments XML dans un fichier sérialisé pour correspondre à l’ordre d’un autre exemple XML (pour lequel la désérialisation fonctionnait sans problème), tout a commencé à fonctionner.

Cela n’a aucun sens pour moi mais peut-être que quelqu’un le sait mieux. 😉

Pour être éligible pour une sérialisation correcte / sérialisation par le DataContractSerializer , tous les éléments suivants doivent être vrais.

  1. La classe qui doit être sérialisée doit avoir le jeu SerializableAtsortingbute ou DataContractAtsortingbute ;
  2. Les propriétés et les champs de la classe devant être sérialisés nécessitent le jeu DataMemberAtsortingbute ;
  3. Le type de données de la propriété ou du champ sérialisable doit être sérialisable (c.-à-d. Avoir un ctor public et hériter de ISerializable);
  4. La classe qui doit être sérialisée doit implémenter IExtensibleDataObject ;
  5. Remarque: les champs sérialisables peuvent être publics ou privés.
  6. Les membres doivent être dans l’ordre alphabétique, sinon vous devez utiliser la propriété Order du DataMemberAtsortingbute .

Donc, l’ordre de la déclaration est important. Si les membres ne sont pas dans l’ordre alphabétique, ils sont ignorés. Recherchez cette réponse sur StackOverflow pour un exemple , cela s’applique peut-être à votre cas.