web-dev-qa-db-ja.com

プロパティで非シリアル化

このようなコードを書くとき

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

次のエラーが表示されます。

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


私が書いたら

[field: NonSerialized]

次の警告が表示されます

'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.


私が書いたら

[property: NonSerialized]

次のエラーが再び表示されます:

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


使用方法[NonSerialized]プロパティについて?

53
IAdapter

まあ...最初のエラーは、あなたはそれを行うことができないと言っています... http://msdn.Microsoft.com/en-us/library/system.nonserializedattribute.aspx

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

バッキングフィールドの使用をお勧めします

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

簡単な使用:

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

うまくいけば、それが役立ちます。

69
Anton Norko

.NET 3.0以降では、Serializableの代わりに DataContract を使用できます。ただし、DataContractでは、シリアル化可能なフィールドに DataMember 属性をマークして「オプトイン」する必要があります。または IgnoreDataMember を使用して「オプトアウト」します。

オプトインとオプトアウトの主な違いは、デフォルトではオプトアウトがパブリックメンバーのみをシリアル化するのに対し、オプトインはマークされたメンバーのみをシリアル化することです(保護レベルに関係なく)。

1
Tezra