Пользовательский сериализатор WCF - PullRequest
7 голосов
/ 09 июня 2009

Я создаю веб-сервис в WCF, который возвращает JSON, но DataContractJsonSerializer блокирует некоторые циклические ссылки (которые я не могу удалить в данном конкретном случае).

Вместо этого я бы хотел использовать библиотеку Newtonsoft json. Какой самый простой способ создать собственный сериализатор в WCF?

Примечание: я знаю, что мог бы просто вернуть поток, но я не хочу, чтобы код операции знал о сериализации.

Ответы [ 4 ]

4 голосов
/ 09 июня 2009

Re pure WCF: если вы управляете обоими концами провода (в «полном» .NET), тогда применение настраиваемого сериализатора относительно просто - вы добавляете поведение, унаследованное от DataContractSerializerOperationBehavior, и переопределить CreateSerializer - см. здесь (с атрибутом здесь ).

Тем не менее! Мое понимание (не проверено) заключается в том, что служба WCF с поддержкой JSON не будет использовать этот маршрут, а будет напрямую применять свой собственный сериализатор.

2 голосов
/ 17 сентября 2009

Установите для атрибута IsReference объекта DataContract значение true, оно доступно в .NET 3.5SP1

[DataContract(IsReference = true)]
public class Employee

Подробнее см. MSDN DataContractAttribute.IsReference

1 голос
/ 03 июля 2009

Очень хорошая статья: XmlSerializer vs DataContractSerializer: Сериализация в Wcf . Там Дэн Ригсби показывает разные сценарии и как сделать свой собственный сериализатор более подробно.

0 голосов
/ 05 августа 2011

вы можете использовать атрибут ScriptIgnore, как упомянуто здесь: - Игнорирование поля во время сериализации .NET JSON; похож на [XmlIgnore]? Хотя я с нетерпением жду возможности реализовать то, что вы хотите, я не хочу украшать множество вложенных объектов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...