Почему нельзя сериализовать поля

Почему поля не сериализуются с помощью сериализатора XML в C#, а свойства — сериализуются? Я знаю, что свойства на самом деле являются методами, но я не понимаю, почему это должно иметь значение. Кто-нибудь знает ответ на это?

Огромное спасибо!


person Zachary Kniebel    schedule 11.07.2013    source источник
comment
Как вы думаете, почему поля не сериализуемы?   -  person Daniel Hilgarth    schedule 11.07.2013
comment
Более чем вероятно, что либо поле имеет тип данных, который еще не сериализуем, либо поле не является общедоступным.   -  person Matthew    schedule 11.07.2013
comment
Вы имеете в виду конкретный сериализатор? Типа XmlSerializer или DataContractJsonSerializer или protobuf-net или что-то еще? Ответ будет зависеть от тех, кто их реализовывает и проектирует, они хотят включать поля, свойства, индексаторы или что бы то ни было их предполагаемое использование.   -  person Chris Sinclair    schedule 11.07.2013
comment
Один из ответов на stackoverflow.com/questions/653536/ заявил об этом (извините, я с телефона и у меня нет ссылки на общий доступ), но я не могу найти никакой информации об этом.   -  person Zachary Kniebel    schedule 11.07.2013
comment
@ZacharyKniebel: есть только один ответ, в котором утверждается это: stackoverflow.com/a/653543/572644. И у него есть комментарий, в котором говорится, что это неверно.   -  person Daniel Hilgarth    schedule 11.07.2013


Ответы (2)


Поля сериализуемы:

Сериализация XML сериализует общедоступные поля и свойства объекта или параметры и возвращаемые значения методов в поток XML, который соответствует определенному документу языка определения схемы XML (XSD). Сериализация XML приводит к строго типизированным классам с общедоступными свойствами и полями, которые преобразуются в XML. System.Xml.Serialization содержит классы, необходимые для сериализации и десериализации XML.

Из MSDN.

person 2GDev    schedule 11.07.2013
comment
Спасибо за вашу помощь. Сначала я не понимал, что то, что сериализуемо, а что нет, может зависеть от типа сериализации. - person Zachary Kniebel; 11.07.2013

Поля сериализуемы. На самом деле все поля сериализованы по умолчанию, если вы не пометите их атрибутом NonSerialized.

Если вы говорите о XML-сериализации, то будут сериализованы только общедоступные поля, потому что XML-сериализация сериализует только общедоступный интерфейс объекта.

person cremor    schedule 11.07.2013
comment
Огромное спасибо! Это многое проясняет. - person Zachary Kniebel; 11.07.2013