Сначала я подумал, что это возможно потому, что на сервере, на котором вы развертываете, не установлен .NET Framework 3.5SP1 и только .NET 3.5RTM.
Однако после проверки сборки .NET 3.5 RTM System.ServiceModel.Web.dll
я вижу, что System.Runtime.Serialization.Json.DataContractJsonSerializer
действительно определено.
Предупреждение компилятора CS1684 предполагает, что в GAC сервера есть сборка System.ServiceModel.Web.dll
, но для которой не определен System.Runtime.Serialization.Json. DataContractJsonSerializer
.
Итак, вещи, которые я бы проверял:
Убедитесь, что сервер развертывания работает как минимум .NET 3.5 RTM и что бета-версия или кандидат на выпуск не используются или не были оставлены.
В Visual Studio 2008 убедитесь, что вы выбрали «Целевую платформу» .NET 3.5 в свойствах проекта.
Одна последняя проверка, которую вы могли бы сделать, чтобы проверить, не связана ли проблема с установкой инфраструктуры сервера, - запустить простое приложение для непосредственного использования DataContractJsonSerializer
. На странице документации MSDN приведен пример для класса:
Класс DataContractJsonSerializer (MSDN)
В крайнем случае, если сервер находится под вашим контролем, я удалю .NET Framework 3.5, а затем переустановлю с:
Microsoft .NET Framework 3.5 с пакетом обновления 1 (полная установка)
Обновление:
Согласно вашим комментариям:
Если вы используете бета-версию 3.5, скорее всего, DataContractJsonSerializer
не в сборке System.ServiceModel.Web.dll
.
Кажется, я вспоминаю CTP, бета-версии и релиз-кандидатов, в которых произошли поздние серьезные изменения в этой области. Я смутно помню, что DataContractJsonSerializer
был одним из таких поздних дополнений / изменений из-за возросшей популярности JSON и давления сообщества. Моя память немного расплывчата, но звонит в колокол.
Чтобы заменить DLL, необходимо отменить регистрацию текущей версии в GAC, а затем зарегистрировать RTM с помощью инструмента GACUTIL.exe
. Я бы не советовал смешивать RTM и бета-биты, вы оставляете себя открытым для непредсказуемого поведения.