Czy jest możliwe zastąpienie dataContractSerializer w Windows Communication Foundation moim własnym serializerem. Jeśli to możliwe, jak mogę to osiągnąć?Custom WCF DataContractSerializer
Odpowiedz
Tak, możesz podać własną implementację serializera. Domyślnie WCF użyje DataContractSerializer
. Aby udostępnić swój własny serializator, musisz napisać własną wersję IOperationBehavior
, która wyszukuje i usuwa aktualnie obowiązującą kolekcję DataContractSerializerOperationBehavior
z kolekcji OperationDescription::Behaviors
, a następnie stosuje niestandardową instancję obiektu DataContractSerializerOperationBehavior
. DataContractSerializerOperationBehavior jest następnie odpowiedzialny za skonstruowanie implementacji XmlObjectSerializer
w swoich metodach fabrycznych. W przypadku niektórych przykładów kodu, jak to zrobić, check out this article by Dan Rigsby.
Stamtąd chodzi wyłącznie o wdrożenie własnego niestandardowego XmlObjectSerializer
, który pozwoli na przekształcenie kodu XML w dowolną reprezentację.
Normalnie umieścić atrybut [DatacontractSerializer]
lub [XmlSerializer]
powyżej umowy o świadczenie usług im całkiem pewien, że można tworzyć własne więc dlaczego je stosować jako atrybuty, teraz jeśli tylko reflector ruszy tak, że mogę sprawdzić XmlSerializer i dowiedzieć się, co sprawia, że się kleszczy.
msdn twierdzą, że ćwiczenia, które chcą być szeregowane przez XmlSerializer, musi być ozdobione [XmlAttribute]
lub [XmlElement]
atrybutów (ponieważ dałoby to więcej kształt do pliku xml ze zrozumieniem), ale to nie działa, jeśli zajęcia są ozdobione [DataMember]
, który jest zgodny z DataContractSerializer, dlatego powinieneś być w stanie stworzyć własny serializator, który będzie serializować wszystko za pomocą znacznika [DataMember], tak jak XmlSerializer
Zespół WCF zrobił to po wprowadzeniu DataContractJsonSerializer.
Istnieje dalece więcej punktów styczności niż te wymienione w pozostałych dwóch odpowiedziach - na przykład może zajść potrzeba wprowadzenia i zmiany zachowań operacji i formaterów operacji, dodania nowego kodera i dodania zupełnie nowego także zachowanie usług i klientów. To zależy od tego, jaki jest nowy format serializacji i co próbujesz zrobić.
Jednak jeśli Twoim celem jest dodanie tylko nowego serializera do samodzielnej serializacji, jest to prostsze.
Co mogę polecić jest - spójrz na wszystkie inne zastosowania DataContractJsonSerializer (za pośrednictwem reflektora) w pliku System.Runtime.Serialization.dll, System.ServiceModel.Web.dll i System.Runtime.ServiceModel.dll.
Jeśli interesuje Cię tylko samodzielny typ serializacji, po prostu spójrz na DataContractJsonSerializer i powiązane klasy w przestrzeni nazw Serialization. Powinna być dość intuicyjna, aby uchwycić różne subtelności implementacji niestandardowej serializacji. Zapytaj, jeśli masz konkretne pytania, ale naprawdę wierzę, że jest to najszybszy i najbardziej elegancki sposób, aby nauczyć się tego konkretnego rozwiązania ...
- 1. Uwierzytelnianie WCF Custom Http Proxy
- 2. Różnica między DataContractSerializer a XmlSerializer
- 3. WCF Custom Validator: Jak zainicjować obiekt "User" z własnego walidatora
- 4. DataContractSerializer w WinRT
- 5. deserializacji XML z DataContractSerializer
- 6. DataContractSerializer vs BinaryFormatter performance
- 7. NetDataContractSerializer kontra DataContractSerializer
- 8. DataContractSerializer nie dane zerowe
- 9. Zapobieganie serializacji elementów pustych w DataContractSerializer
- 10. Custom Rehediler (RX) Custom Scheduler C#
- 11. Czy warto buforować instancje DataContractSerializer?
- 12. DataContractSerializer z wieloma przestrzeniami nazw
- 13. Jak ustawić StreamingContext dla DataContractSerializer?
- 14. DataContractSerializer nie obsługuje prostokątnych tablic
- 15. WCF: Konfigurowanie znanych typów
- 16. CollectionAssert.AreEquivalent z Custom IEqualityComparer
- 17. Custom ListView Adapter Android
- 18. Wdrażanie Custom MembershipUser
- 19. Alfresco Solr Custom Search
- 20. Custom Analyzer elasticsearch-rails
- 21. Custom Segue w Swift
- 22. Custom Collection Implementing IEnumerable
- 23. C#: Custom assembly directory
- 24. Linq do Xml VS XmlSerializer VS DataContractSerializer
- 25. Jak deserializować XML przy użyciu DataContractSerializer
- 26. Problem DataContractSerializer ze zdarzeniami/delegowanie pól
- 27. Ustawienie WCF MaxItemsInObjectGraph nie działa
- 28. Konfigurowanie WCF dla wsHttpBinding
- 29. Znany typ WCF z System.Object w Config
- 30. Android - Custom AlertDialog Kolor tła
Cześć Drew, Ale to mój serializer musi pochodzić z klasy bazowej lub implementować niektóre interfejsy. Jeśli odpowiedź brzmi "tak", co to jest? Czy serializator musi być rodzajem xmlserializera? Napisałem serializer, który serializuje typy jako bajty. – mkus
Musisz odziedziczyć po XmlObjectSerializer i zapewnić implementację własną dla różnych metod. –
To jest starsze pytanie, ale myślę, że powinienem dodać, że ten artykuł z msdn ostrzega przed modyfikowaniem OperationDescription z metody IOperationBehavior http://msdn.microsoft.com/en-us/library/system.servicemodel.description.ioperationbehavior. aspx. – insipid