2009-12-28 13 views

Antwort

8

Ja, Sie können Ihre eigene Serializer-Implementierung bereitstellen. Standardmäßig verwendet WCF die DataContractSerializer. Um Ihren eigenen Serialisierer bereitzustellen, müssen Sie Ihren eigenen IOperationBehavior schreiben, der die aktuell angewendete DataContractSerializerOperationBehavior aus der OperationDescription::Behaviors Auflistung sucht und entfernt und dann eine benutzerdefinierte Instanz von DataContractSerializerOperationBehavior anwendet. Das DataContractSerializerOperationBehavior ist dann verantwortlich für die Erstellung einer XmlObjectSerializer Implementierung in seinen CreateSerializer Factory-Methoden. Für einige Codebeispiele, wie dies zu tun ist, check out this article by Dan Rigsby.

Von dort aus dreht sich alles um die Implementierung Ihrer eigenen benutzerdefinierten XmlObjectSerializer, mit der Sie das XML-Infoset in jede gewünschte Repräsentation serialisieren können.

+0

Hallo Drew, Aber mein Serializer muss von einer Basisklasse abgeleitet sein oder etwas implementieren Schnittstellen. Wenn die Antwort ja ist, was sind das? Muss der Serializer eine Art XML-Serializer sein? Ich schrieb einen Serializer, der Typen als Bytes serialisiert. – mkus

+0

Sie müssen von XmlObjectSerializer erben und eine eigene Implementierung für die verschiedenen Methoden bereitstellen. –

+0

Dies ist eine ältere Frage, aber ich denke, ich sollte hinzufügen, dass dieser Artikel von msdn davor warnt, die OperationDescription von einer IOperationBehavior-Methode http://msdn.microsoft.com/en-us/library/system.servicemodel.description.ioperationsbehavior zu modifizieren. aspx. – insipid

2

Normalerweise legen Sie das Attribut [DatacontractSerializer] oder [XmlSerializer] über dem Service-Vertrag, im ziemlich sicher, dass Sie damit Ihre eigene Gruppe gründen könnte, warum man sie als Attribute gelten, wenn jetzt nur reflector beginnen würde, so dass ich die XmlSerializer inspizieren konnte und finden Sie heraus was macht es tick.

msdn darauf bestehen, dass Klassen, die über die XmlSerializer serialisiert werden sollen, müssen mit [XmlAttribute] oder [XmlElement] Attributen versehen werden (da es mehr Form an die XML-Datei verstehend geben würde), aber es funktioniert, wenn Ihre Klassen mit der dekoriert [DataMember], das mit DataContractSerializer kompatibel ist, weshalb Sie in der Lage sein sollten, einen eigenen Serializer zu erstellen, der alles mit einem [DataMember] -Tag serialisiert, genau wie der XmlSerializer

3

Das WCF-Team hat dies bei der Einführung von DataContractJsonSerializer getan.

Es gibt weit mehr Touchpoints als die hier genannten in den anderen zwei Antworten - zum Beispiel müssen Sie möglicherweise das Betriebsverhalten und die verwendeten Operationsformatierer einführen und ändern, einen neuen Encoder hinzufügen und völlig neue hinzufügen Service- und Kundenverhalten. Es hängt davon ab, was das neue Serialisierungsformat ist und was Sie tun möchten.

Wenn Sie jedoch nur einen neuen Serializer für die eigenständige Serialisierung hinzufügen möchten, ist dies einfacher.

Was ich empfehlen würde ist - sehen Sie sich die gesamte Verwendung von DataContractJsonSerializer (über Reflector) in System.Runtime.Serialization.dll, System.ServiceModel.Web.dll und System.Runtime.ServiceModel.dll.

Wenn Sie nur an der Standalone-Serialisierung interessiert sind, sehen Sie sich den DataContractJsonSerializer und die zugehörigen Klassen im Serialization-Namespace an. Es sollte ziemlich intuitiv für Sie sein, die verschiedenen Feinheiten der benutzerdefinierten Serialisierungsimplementierung zu erfassen. Fragen Sie nach, wenn Sie spezielle Fragen haben, aber ich glaube wirklich, dass dies die schnellste und eleganteste Art ist, diese spezielle Lösung zu erlernen ...

Verwandte Themen