Это только требование для BinaryFormatter
(и эквивалент SOAP, но никто не использует его). Диего прав; для этого есть веские причины с точки зрения того, что он делает, но это далеко от единственного варианта - действительно, лично я только рекомендую BinaryFormatter
для разговора между AppDomains
- не (IMO) - хороший способ сохранить данные (на диск, в кэш, в BLOB-базу данных и т. д.).
Если это поведение вызывает у вас проблемы, рассмотрите возможность использования любой из альтернатив:
XmlSerializer
, который работает с открытыми членами (не только с полями), но требует открытого конструктора без параметров и открытого типа
DataContractSerializer
, который может работать полностью opt-in (с использованием [DataContract]
/ [DataMember]
), но который также (в 3.5 и выше) может работать вместо полей вместо
Также - для стороннего варианта (я являюсь третьим лицом); у protobuf-net здесь могут быть опции; «v2» (еще не полностью выпущен, но доступен как источник) позволяет описывать модель (какие элементы сериализуются и т. д.) независимо от типа, чтобы ее можно было применять к типам, которые вы не контролируете. И, в отличие от BinaryFormatter, выходные данные зависят от версии, общедоступного формата и т. Д.