пользовательские преобразователи сериализации для службы WCF - PullRequest
3 голосов
/ 30 апреля 2009

В настоящее время мы используем метод веб-службы .asmx, который сериализует наш объект в Json, чтобы вернуть его клиенту и использовать код MS Ajax. Для некоторых членов объекта мы используем пользовательские конвертеры через классы, которые наследуются от JavaScriptConverter и переопределяют метод Serialize. Мы «связываем» эти пользовательские конвертеры в нашем web.config через элементы:

<system.web.extensions>
  <scripting>
    <webServices>
      <jsonSerialization maxJsonLength="2000000">
        <converters>
          <add name="ElementReference" type="OurNamespace.OurJavascriptConverter">

Сейчас мы переходим на веб-сервис WCF. Я не могу найти эквивалент WCF.

Спасибо за любую помощь.

Ответы [ 3 ]

3 голосов
/ 03 мая 2009

Одним из подходов является использование необработанной модели программирования WCF , описанной Карлосом Фигуерией, в сочетании с JSON.NET .

Я обнаружил, что JSON.NET гораздо более гибок и настраиваем, чем сериализаторы WCF JSON.

2 голосов
/ 30 апреля 2009

Это может быть то, что вы ищете http://blogs.msdn.com/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspx.

Хотя речь идет о REST, не уверен, что вы используете WCF таким образом. Возможно, это будет полезно, проверьте это.

0 голосов
/ 01 мая 2009

По умолчанию WCF использует DataContractSerializer в режиме basic-http и NetDataContractSerializer в некоторых двоичных режимах tcp. В действительности вы не можете внедрить конвертер для каждого типа / свойства, но вы можете заменить сериализатор, добавив «поведение» в контракт (с обоих концов). Хотя это возможно, это не очень переносимо, и вам бы советовали придерживаться обычной раскладки, чтобы «mex» понимал все правильно.

См. Здесь для примера такого поведения.

AFAIK, наиболее вероятной альтернативой (для пользовательской сериализации) было бы реализовать IXmlSerializable и делать все самостоятельно - не весело.

...