Возможно ли заменить dataContractSerializer в Windows Communication Foundation на мой собственный сериализатор. Если это возможно, как я могу это достичь?Пользовательский WCF DataContractSerializer
ответ
Да, вы можете предоставить свою собственную реализацию сериализатора. По умолчанию WCF будет использовать DataContractSerializer
. Чтобы предоставить собственный сериализатор, вы должны написать свой собственный IOperationBehavior
, который ищет и удаляет применяемый в настоящее время DataContractSerializerOperationBehavior
из коллекции OperationDescription::Behaviors
, а затем применяет собственный экземпляр DataContractSerializerOperationBehavior
. Затем DataContractSerializerOperationBehavior отвечает за построение реализации XmlObjectSerializer
в своих заводских методах CreateSerializer
. Для некоторых примеров кода, как это сделать, check out this article by Dan Rigsby.
Оттуда это все о внедрении собственного пользовательского XmlObjectSerializer
, который позволит вам сериализовать XML-данные любому желаемому представлению.
Обычно вы поместите атрибут [DatacontractSerializer]
или [XmlSerializer]
выше Service Contract, им вполне уверен, вы можете создать свой собственный, следовательно, почему вы применять их в качестве атрибутов, теперь, если только reflector бы начать, так что я мог осмотреть XmlSerializer и выяснить, что делает его тикающим.
msdn настаивает на том, что классы, которые хотят быть сериализовать через XmlSerializer, должны быть украшены [XmlAttribute]
или [XmlElement]
атрибутов (так как это дало бы больше формы в файл XML понимающе), но это не будет работать, если ваши классы оформлены с [DataMember]
, который совместим с DataContractSerializer, поэтому вы должны иметь возможность создавать собственный сериализатор, который будет сериализовать что-либо с тегом [DataMember], как XmlSerializer
Команда WCF сделала это, когда представила DataContractJsonSerializer.
Есть далеко больше, чем источники информации уже упомянутых здесь, в двух других ответов - например, вы, возможно, придется вводить и изменять операции поведения и операции форматирования используется, добавьте новый кодер, и добавить совершенно новый обслуживания и поведения клиентов. Это зависит от того, что новый формат сериализации и что вы пытаетесь сделать.
Однако, если ваша цель состоит только в том, чтобы добавить новый сериализатор для автономной сериализации, это проще.
Что я хотел бы порекомендовать - посмотрите на все различные использования DataContractJsonSerializer (через Reflector) в System.Runtime.Serialization.dll, System.ServiceModel.Web.dll и System.Runtime.ServiceModel.dll.
Если вас интересует только отдельный аспект сериализации, просто посмотрите на DataContractJsonSerializer и связанные классы в пространстве имен Serialization. Для вас достаточно интуитивно понять различные тонкости реализации пользовательской сериализации. Задайте вопрос, если у вас есть конкретные вопросы, но я действительно считаю, что это самый быстрый и элегантный способ узнать это решение ...
- 1. WCF DataContractSerializer Deserialize направление
- 2. WCF DataContractSerializer Behavior
- 3. WCF DataContractSerializer не удается сериализовать
- 4. Медленная сериализация ответа WCF с использованием DataContractSerializer
- 5. WCF: как сериализовать DataTable с помощью DataContractSerializer?
- 6. Можете ли вы использовать DataContractSerializer вне WCF?
- 7. WCF DataContractSerializer Производительность с длинными именами свойств
- 8. DataContractSerializer
- 9. Аннотация для WCF DataContractSerializer для замены ArrayOf с настраиваемым именем
- 10. Использовать XmlSerializer Вместо DataContractSerializer
- 11. DataContractSerializer и известные типы
- 12. DataContractSerializer пропускает объект
- 13. DatacontractSerializer для настольных приложений
- 14. Пропустить DataMember через DataContractSerializer
- 15. Разница между DataContractSerializer и XmlSerializer
- 16. WCF Rest Пользовательский URL
- 17. WCF Service - Пользовательский Principal
- 18. Пользовательский WCF MessageFormatter
- 19. Десериализация вложенного дерева объектов с использованием WCF DataContractSerializer
- 20. Сериализация ответа, полученного от службы WCF с помощью DataContractSerializer
- 21. Как десериализовать вложенный xml с помощью DataContractSerializer в wcf?
- 22. DataContractSerializer Ошибка с помощью Entity Framework 4.0 с WCF 4.0
- 23. Включить исключения как DataMember для DataContractSerializer WCF C#
- 24. WCF DataContractSerializer не берет атрибуты контракта ... почему бы и нет?
- 25. WCF DataContractSerializer и XMLSerializer как в одном сервисе. Возможное?
- 26. Сериализация и десериализация XmlDocument в WCF с использованием DataContractSerializer
- 27. Документация DataContractSerializer
- 28. DataContractSerializer - Проблемы
- 29. Тестирование DataContractSerializer со строкой
- 30. PostSharp при использовании DataContractSerializer?
Hi Drew, Но мой сериализатор должен быть получен из базового класса или реализовать некоторые интерфейсы. Если да, то каковы они? Сепаратор должен быть своего рода xmlserializer? Я написал сериализатор, который сериализует типы как байты. – mkus
Вы должны наследовать от XmlObjectSerializer и предоставить собственную реализацию для различных методов. –
Это старый вопрос, но я думаю, я должен добавить, что эта статья из msdn предупреждает об изменении OperationDescription из метода IOperationBehavior http://msdn.microsoft.com/en-us/library/system.servicemodel.description.ioperationbehavior. ASPX. – insipid