37 votes

Comment empêcher la sérialisation des propriétés implémentées automatiquement?

Comment puis-je empêcher une propriété automatiquement implémentée d'être sérialisée par le formateur binaire? L'attribut [Non sérialisé] ne peut être utilisé qu'avec des champs. Et le champ est masqué lors de l'utilisation de propriétés implémentées automatiquement.

60voto

Jehof Points 14720

Ce n'est pas pris en charge pour les propriétés implémentées automatiquement. Vous devez utiliser un champ de sauvegarde et y définir le NonSerializedAttribute .

 public class ClassWithNonSerializedProperty {

  [NonSerialized]
  private object _data;  // Backing field of Property Data that is not serialized

  public object Data{
    get { return _data; }
    set { _data = value; }
  }
}
 

7voto

xyz Points 9067
 // This works for the underlying delegate of the `event` add/remove mechanism.
[field:NonSerialized]
public event EventHandler SomethingHappened;
 

Mais cela ne semble pas être le cas pour les propriétés implémentées automatiquement. Je pensais que cela valait la peine d’être mentionné car il est utile de savoir lors de la sérialisation d’un objet auquel des abonnés d’événements sont attachés.

5voto

Neil Barnwell Points 20731

Je ne suis pas sûr que vous le pouvez. Cet article MSDN sur SerializableAttribute vous propose de mettre en œuvre ISerializable et de contrôle de la sérialisation vous-même:

Tous les champs publiques et privées dans un type qui sont marqués par les SerializableAttribute sont sérialisés par défaut, à moins que le type implémente l'interface ISerializable pour remplacer le processus de sérialisation.

Ou passer d'une auto-propriété de ce domaine particulier.

5voto

Danil Points 1084

Si vous sérialisez en XML, vous pouvez utiliser l'attribut XmlIgnore.

5voto

Sergey Teplyakov Points 6556

Il n'est pas possible pour l'auto propriétés implémentées. Envisager suivantes:

Ce comportement est "by design". La décision au moment de l'auto-propriétés ont été mises en œuvre était qu'ils allaient travailler dans la "commune" qui, entre autres choses, signifie qu'aucun des attributs sur le champ généré. L'idée derrière tout ça est de les garder simple et pas lentement la mutation en plein propriétés. Donc, si vous devez utiliser l'attribut NonSerialized plein propriétés sont le chemin.

(http://social.msdn.microsoft.com/Forums/en-US/vcsharp2008prerelease/thread/2b6eb489-122a-4418-8759-10808252b195)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X