2017-01-11 4 views
1

Я создаю службу WCF, которая также имеет конечную точку для JSON.Изменение сериализатора JSON по умолчанию в WCF

Проблема: DataContractSerializer по умолчанию в WCF использует стандарт, который я не хочу использовать. Я изучил это, но я не нашел хорошего способа сделать это. Все темы и решения, которые я нахожу для этого, довольно старые, 2012-2013. Есть ли для этого чистое решение или Microsoft внесла некоторые изменения в WCF, чтобы сделать это проще, чем писать собственный DispatchMessageFormatter и т. Д.?

Примечание. Я не говорю о Сети. Это чистая самообслуживаемая служба WCF.

Я попробовал уже внедрить DispatchMessageFormatter. Он работает, но у него есть некоторые проблемы, связанные с ним, например, все WebContentFormat должно быть Raw и т. Д.

Этот вопрос конкретно упоминает принятые ответы в этом вопросе и просит еще один способ сделать это сейчас пять лет позже без всех отрицательных побочных эффектов, которые он приносит.

+0

Дополнительное примечание: вопрос может показаться вам неспокойным (речь идет о привязках к сети и т. Д.), Но принятый ответ действителен для любой службы WCF. –

+0

Этот вопрос конкретно упоминает принятые ответы в этом вопросе и просит еще один способ сделать это сейчас через 5 лет без всех отрицательных побочных эффектов, которые он приносит. – SomeRandomName

+0

«конкретно упоминает принятые ответы в этом вопросе» - извините, я не видел никакой ссылки в вашем вопросе. Только одна дата не звонила. Тем не менее [ответ] (http://stackoverflow.com/a/6792899/21567) - это способ сделать это в WCF. Если это недостаточно для ваших целей, что может быть очень хорошо, тогда вам, вероятно, следует сопоставить те проблемы, о которых вы говорите, более подробно, чтобы мы могли найти более конкретное решение. –

ответ

1

Попробуйте перехватить сообщение в классе MessageInspector (происходит из IClientMessageInspector или IDispatchMessageInspector для клиента и службы соответственно). Затем конвертируйте XML в JSON и отправьте в качестве ответа.

Я не проверял; это просто дикая догадка.