Ich verwende .NET 3.5SP1 und DataContractSerializer, um eine Klasse zu serialisieren. In SP1 haben sie das Verhalten so geändert, dass Sie keine DataContract / DataMember-Attribute in die Klasse aufnehmen müssen, und es wird nur das gesamte Objekt serialisiert. Dies ist das Verhalten, das ich verwende, aber jetzt muss ich eine Eigenschaft aus dem Serializer ignorieren. Ich weiß, dass eine Möglichkeit, dies zu tun, darin besteht, der Klasse das DataContract-Attribut hinzuzufügen und einfach das DataMember-Attribut auf alle Mitglieder zu setzen, die ich einschließen möchte. Ich habe jedoch Gründe, dass dies bei mir nicht funktionieren wird.
Meine Frage ist also, gibt es ein Attribut oder etwas, mit dem der DataContractSerializer eine Eigenschaft ignorieren kann?
quelle
[IgnoreDataMember]
würde nicht funktionieren, wenn die Klasse ein[Serializable]
Attribut hat. Siehe Details in der Antwort von Doug .Darüber hinaus serialisiert DataContractSerializer Elemente, die als [Serializable] gekennzeichnet sind, und serialisiert auch nicht markierte Typen in .NET 3.5 SP1 und höher, um die Unterstützung für die Serialisierung anonymer Typen zu ermöglichen.
Es hängt also davon ab, wie Sie Ihre Klasse dekoriert haben, um zu verhindern, dass ein Mitglied serialisiert:
[DataContract]
, entfernen Sie das[DataMember]
für die Eigenschaft.[Serializable]
, fügen Sie[NonSerialized]
vor dem Feld für die Eigenschaft hinzu.[IgnoreDataMember]
das Anwesen erweitern.quelle
Bei der XML-Serialisierung können Sie das Attribut [XmlIgnore] (System.Xml.Serialization.XmlIgnoreAttribute) verwenden, um eine Eigenschaft beim Serialisieren einer Klasse zu ignorieren.
Dies kann für Sie von Nutzen sein (oder nur für jeden, der diese Frage gefunden hat, als er versucht hat, herauszufinden, wie eine Eigenschaft beim Serialisieren in XML ignoriert werden kann, wie ich es war).
quelle
Versuchen Sie, das Feld mit dem Attribut [NonSerialized ()] zu markieren. Dadurch wird der Serializer angewiesen, das Feld zu ignorieren.
https://msdn.microsoft.com/en-us/library/system.nonserializedattribute(v=vs.110).aspx
quelle
Was Sie sagen, steht im Widerspruch zu dem, was in der MSDN-Bibliothek an diesem Speicherort steht:
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx
Ich sehe keine Erwähnung der von Ihnen erwähnten SP1-Funktion.
quelle