Ist es möglich, DataContractSerializer in Windows Communication Foundation mit meinem eigenen Serializer zu ersetzen. Wenn es möglich ist, wie kann ich das erreichen?Benutzerdefinierter WCF DataContractSerializer
Antwort
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.
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
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 ...
- 1. WCF-Dienst dataContractSerializer maxItemsInObjectGraph in web.config
- 2. WCF benutzerdefinierter Serializer
- 3. Serialize und Deserialize ein XmlDocument in WCF, das DataContractSerializer verwendet
- 4. WCF DataContractSerializer hebt keine Vertragsattribute auf ... warum nicht?
- 5. überspringen Datamember über DataContractSerializer
- 6. Benutzerdefinierter WCF-Dienst für SharePoint 2010
- 7. DataContractSerializer Dokumentation
- 8. WCF wird nicht meine Klasse serialisiert aber die DataContractSerializer scheinen glücklich, wenn nicht WCF
- 9. DataContractSerializer, null Daten
- 10. XML und DataContractSerializer
- 11. DataContractSerializer mit mehreren Namespaces
- 12. Problem beim Freigeben benutzerdefinierter komplexer Schnittstellentypen in WCF-Diensten
- 13. Vordefinieren von XML-Namespaces für DataContractSerializer
- 14. Wie XML deserialisiert DataContractSerializer mit
- 15. DataContractSerializer Serialisierung throw Ausnahme C#
- 16. Ignorieren Feld Reihenfolge in DataContractSerializer
- 17. DataContractSerializer überspringen Wert OpenAccess- Version
- 18. Stop DataContractSerializer in Namespace einfügen?
- 19. Benutzerdefinierter Alarmdialog mit benutzerdefinierter Listenansicht
- 20. Verhindern der Serialisierung von Null-Membern in DataContractSerializer
- 21. DataContractSerializer serialisiert das gleiche Objekt mehr als einmal pro Anfrage
- 22. Serialisieren von Objekten ohne Namespaces mit DataContractSerializer
- 23. Einige Eigenschaften werden nicht mit DataContractSerializer deserialisiert
- 24. C# xml Deserialisierung DataContractSerializer mit unbekanntem Format
- 25. DataContractSerializer ruft meinen Konstruktor nicht auf?
- 26. Formatierung von XML erstellt von DataContractSerializer
- 27. Wie schreibt DataContractSerializer in private Felder?
- 28. WCF Service Objekt Serialisierung
- 29. WCF: Konfigurieren bekannter Typen
- 30. Benutzerdefinierter Ereignisspeicherort
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
Sie müssen von XmlObjectSerializer erben und eine eigene Implementierung für die verschiedenen Methoden bereitstellen. –
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