Поля против свойств и XMLSerializers (101)

Итак, я изучал использование различных сериализаторов в .NET Framework, и, пытаясь поэкспериментировать с предотвращением сериализации определенных объектов в классе, мне пришлось вернуться к некоторым очень простым вопросам программирования, которые Я «думал», что знаю. Рассмотрим этот пример:

public class Example
{
   public string examName;
   [XmlIgnore]
   public int exampleNumber;

   public Example()
   { }
   [XmlIgnore]
   public int ExampleNumberTwo { get; set; }
}

Я могу создать экземпляр этого класса и с помощью XMLSerializer можно вывести содержимое этого класса в формате XML. Атрибут [XmlIgnore] действительно делает то, что я ожидал; он предотвращает сериализацию элементов, на которые имеется ссылка.

Итак, решив продолжить, я заменил объявление [XmlIgnore] для «exampleNumber» на [NonSerializable], ожидая аналогичных результатов, но вывод не изменился. После поиска в ресурсах было заявлено, что атрибут [NonSerializable] следует использовать только в полях, а атрибуты [XmlIgnore] следует использовать в свойствах.

Еще в одном сообщении говорилось, что атрибут [NonSerializable] не действует при использовании XMLSerializer, но даст ожидаемые результаты при использовании SOAP или BinaryFormatter. Итак, я потерял концепцию на данный момент.

Но это привело меня к основному вопросу, что определяет поле по сравнению со свойством? Я знаю, что это основной вопрос, и я даже просматривал здесь другие обсуждения, но степень ясности, которую я ищу, все еще не совсем ясна.

Я могу использовать атрибут [XmlIgnore] в свойстве (ExampleNumberTwo) или переменная (exampleNumber), поэтому утверждение о том, что ее можно использовать ТОЛЬКО в свойствах, не кажется правильным.

Но опять же, я всегда называл объекты в моем примере, такие как (instanceName) и (exampleNumber), переменными-членами. Так что же такое сигнатура «поля»

Может ли кто-нибудь пролить свет на это?

0
задан airmanx86 19 August 2011 в 13:59
поделиться