Ich habe festgestellt, dass meine WCF-Dienste normal funktionieren, wenn die beteiligten Datentypen nicht das [DataContract]
, sondern das [Serializable]
haben.
Aber alle WCF-Tutorials zeigen die erste anstelle der zweiten. Warum?
DataContractAttribute gibt Ihnen mehr Kontrolle darüber, was über die Verbindung gesendet wird. Sie können also nur die erforderlichen Felder einer bestimmten Entität senden. Serializable verwendet eine Plattform-Serialisierung, die .NET und die gleichen (oder ähnlichen) Versionen der Typen an beiden Enden der Leitung voraussetzt. Sie serialisiert (normalerweise) alle privaten Mitglieder, den Zustand usw. DCS ist für einen leichten XML-ish gedacht Darstellung, die Sie kontrollieren können, und XmlSerializer ist für ein XML-Format, das Sie sehr gut kontrollieren können (Attributdaten usw.).
Es ist nicht genug, die Klasse mit [DataContract] zu markieren, Sie müssen die Felder, die Sie serialisieren möchten, ebenfalls mit [DataMember] dekorieren.
Der Datenvertrag ist ein "Opt-In" -Modell der Serialisierung, bei dem der XML-Serialzier "Opt-out" ist.
Ein Vorteil ist, dass der DataContract Serializer viel schneller ist als der alte XmlSerializer.
Bearbeiten: In den Beispielen wird das Attribut [DataContract] angezeigt, da es für den von WCF verwendeten DataContractSerializer entworfen wurde.
Tags und Links wcf .net attributes serialization datacontract