Несериализированный на имущество - PullRequest
52 голосов
/ 08 октября 2011

Когда я пишу такой код

[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] на имущество?

Ответы [ 3 ]

69 голосов
/ 29 мая 2012

Простое использование:

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

Надеюсь, это поможет.

46 голосов
/ 08 октября 2011

Ну ... первая ошибка говорит, что вы не можете этого сделать ... от 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;
1 голос
/ 05 марта 2019

Начиная с .NET 3.0, вы можете использовать DataContract вместо Serializable.Однако с помощью DataContract вам нужно будет либо «подписаться», помечая сериализуемые поля атрибутом DataMember ;или «отказаться» с помощью IgnoreDataMember .

Основное различие между отказом от подписки состоит в том, что по умолчанию отказ от участия будет только сериализовать общедоступных членов, тогда как отказ от участиябудет только сериализовать помеченные элементы (независимо от уровня защиты).

...