Question

[Serializable]
class MyClass
{
    [NonSerialized] int Foo { get; set; } // error
    [NonSerialized] int bar; // ok
}

Pourquoi est-ce refusée?

Je sais que sur les solutions de contournement comme

  • la mise en œuvre ISerializable
  • commutation à XmlSerializer / XmlIgnore
  • commutation à une propriété mis en oeuvre manuellement

La question est spécifiquement pourquoi est [NonSerialized] sur properies sur Rejeté, encore admis sur les champs.

Était-ce utile?

La solution

sont en fait des méthodes, ils ne sont pas sérialisés par le processus de sérialisation binaire. Ce sont les champs qui sont sérialisés. Donc, il est logique de préciser NonSerialized sur un champ.

Autres conseils

Je pense que c'est un cas de contrôle à grains fins nécessitant plus d'effort de votre part. En d'autres termes, une propriété automatique par défaut un champ de support sérialisable. Si vous voulez autre chose que la valeur par défaut, vous ne pouvez pas utiliser une propriété automatique.

Je pensais que l'utilisation [field:NonSerialized] contre le travail des forces de la propriété, mais il ne fonctionne pas. La spécification C # ne pas appeler explicitement la sérialisation du champ de support, mais il ne comprend ce (10.7.3):

The following example:
 public class Point {
    public int X { get; set; } // automatically implemented
    public int Y { get; set; } // automatically implemented
}
is equivalent to the following declaration:
public class Point {
    private int x;
    private int y;
    public int X { get { return x; } set { x = value; } }
    public int Y { get { return y; } set { y = value; } }
}

Ainsi, le champ de support est serializable (valeur par défaut).

Vous pouvez vouloir regarder IgnoreDataMemberAttribute si vous utilisez WCF. Cela fonctionne sur les propriétés auto.

fonctionne même si vous ne marquez pas tous les autres membres comme DataMember (que je trouve toujours une douleur) et la classe avec DataContract

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top