DataContractSerializer
будет сериализовать либо все общедоступные свойства (если вы ничего не указываете - возможно, начиная с .NET 3.5 SP1), либо (что я предпочитаю) все, что вы пометите атрибутом [DataMember].
Поэтому лучшее, что вы можете сделать, - пометить свой класс атрибутом [DataContract]
, а все члены (свойства, поля и т. Д.), Которые вы действительно хотите в своем контракте данных, - атрибутом [DataMember]
.
DataContractSerializer на самом деле не позволяет намного больше контроля, чем это - вы можете довольно четко определить (используя этот явный подход "opt-in") что сериализуется, но у вас мало или нет контроля над как сериализуется.
Но тебе это действительно нужно? На самом деле?
Если это так, вам, вероятно, придется вместо этого использовать XmlSerializer для этого процесса сериализации - там вы можете получить больший контроль над тем, как вещи сериализуются (но в качестве недостатка XmlSerializer будет сериализовать каждую публичную версию). свойство, которое явно не помечено атрибутом [XmlIgnore]
- схема отказа)
Ознакомьтесь с блогом Дэна Ригсби о различиях между DataContractSerializer и XmlSerializer и о том, что каждый из них может предложить.