Итак, я изучал использование различных сериализаторов в .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), переменными-членами. Так что же такое сигнатура «поля»
Может ли кто-нибудь пролить свет на это?