web-dev-qa-db-fra.com

Comment puis-je ignorer une propriété lors de la sérialisation à l'aide de DataContractSerializer?

J'utilise .NET 3.5SP1 et DataContractSerializer pour sérialiser une classe. Dans SP1, ils ont changé le comportement afin que vous n'ayez pas à inclure les attributs DataContract/DataMember sur la classe et que le tout sera sérialisé. C'est le comportement que j'utilise, mais je dois maintenant ignorer une propriété du sérialiseur. Je sais qu’une façon de procéder consiste à ajouter l’attribut DataContract à la classe et à placer l’attribut DataMember sur tous les membres que je souhaite inclure. J'ai des raisons, cependant, que cela ne fonctionnera pas pour moi.

Ma question est donc la suivante: existe-t-il un attribut ou quelque chose que je peux utiliser pour que DataContractSerializer ignore une propriété?

113
NotDan
164
Paul Ruane

De plus, DataContractSerializer sérialisera les éléments marqués comme [Serializable], ainsi que les types non marqués dans .NET 3.5 SP1 et versions ultérieures, afin de permettre la prise en charge de la sérialisation des types anonymes.

Donc, cela dépend de la façon dont vous avez décoré votre classe pour empêcher un membre de la sérialisation:

  • Si vous avez utilisé [DataContract], puis retirez le [DataMember] pour la propriété.
  • Si vous avez utilisé [Serializable], puis ajouter [NonSerialized] devant le champ pour la propriété.
  • Si vous n'avez pas décoré votre classe, alors vous devriez ajouter [IgnoreDataMember] à la propriété.
150
Doug

Dans la sérialisation XML, vous pouvez utiliser l'attribut [XmlIgnore] (System.Xml.Serialization.XmlIgnoreAttribute) pour ignorer une propriété lors de la sérialisation d'une classe.

Cela peut vous être utile (ou peut être utile à tous ceux qui ont trouvé cette question lorsqu’ils tentaient de savoir comment ignorer une propriété lors de la sérialisation en XML, comme j’étais).

30
Kris Adams

Essayez de marquer le champ avec l'attribut [NonSerialized ()]. Cela indiquera au sérialiseur d'ignorer le champ.

https://msdn.Microsoft.com/en-us/library/system.nonserializedattribute (v = vs.110) .aspx

1
Cris Valenzuela

Ce que vous dites est en conflit avec ce qui est écrit dans la bibliothèque MSDN à cet emplacement:

http://msdn.Microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx

Je ne vois aucune mention de la fonctionnalité SP1 que vous mentionnez.

0
Tony The Lion