web-dev-qa-db-fra.com

Non sérialisé sur la propriété

Quand j'écris du code comme ça

[XmlIgnore]
[NonSerialized]
public List<string> paramFiles { get; set; }

J'obtiens l'erreur suivante:

Attribute 'NonSerialized' is not valid on this declaration type.
It is only valid on 'field' declarations.


Si j'écris

[field: NonSerialized]

Je reçois l'avertissement suivant

'field' is not a valid attribute location for this declaration.
Valid attribute locations for this declaration are 'property'.
All attributes in this block will be ignored.


Si j'écris

[property: NonSerialized]

J'obtiens l'erreur (à nouveau) suivante:

Attribute 'NonSerialized' is not valid on this declaration type.
It is only valid on 'field' declarations.


Comment puis-je utiliser [NonSerialized] sur une propriété?

53
IAdapter

Eh bien ... la première erreur dit que vous ne pouvez pas faire ça ... à partir de http://msdn.Microsoft.com/en-us/library/system.nonserializedattribute.aspx

 [AttributeUsageAttribute(AttributeTargets.Field, Inherited = false)]
 [ComVisibleAttribute(true)]
 public sealed class NonSerializedAttribute : Attribute

Je suggère d'utiliser le champ de support

 public List<string> paramFiles { get { return list;}  set { list = value; } }
 [NonSerialized]
 private List<string> list;
49
wiero

Utilisation simple:

[XmlIgnore]
[ScriptIgnore]
public List<string> paramFiles { get; set; }

Espérons que cela aide.

69
Anton Norko

Depuis .NET 3.0, vous pouvez utiliser DataContract au lieu de Serializable. Cependant, avec DataContract, vous devrez soit vous inscrire en marquant les champs sérialisables avec l'attribut DataMember ; ou "opt-out" en utilisant IgnoreDataMember .

La principale différence entre l'opt-in et l'opt-out est que l'opt-out par défaut ne sérialise que les membres publics, tandis que l'opt-in ne sérialise que les membres marqués (quel que soit le niveau de protection).

1
Tezra