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.
Réponses
Trop de publicités?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; }
}
}
// 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.
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.
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)