ASP.NET Javascript Converter, кажется, не вызывается - PullRequest
6 голосов
/ 23 декабря 2009

У меня есть веб-приложение ASP.NET 3.5 SP1, в котором используется пользовательский JavaScriptConverter. Код раньше работал в прошлом, но перестал работать. Я не знаю, какие изменения произошли на стороне среднего сервера. Проблема, которую мы видим сейчас, заключается в том, что конвертер не вызывается, поэтому мы получаем ошибки, которые не могут быть сериализованы System.Data.DataRow.

Ниже приведена соответствующая часть web.config:

<system.web.extensions>
    <scripting>
        <webServices>
            <jsonSerialization>
                <converters>
                    <add name="DataSetConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter, Microsoft.Web.Preview" />
                    <add name="DataRowConverter" type="WebUI.DataRowConverter, WebUI.DataRowConverter, Version=1.1.0.323, Culture=neutral" />
                    <add name="DataTableConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter, Microsoft.Web.Preview" />
                </converters>
            </jsonSerialization>
        </webServices>
    </scripting>
</system.web.extensions>

Урезанная версия класса выглядит следующим образом (урезана только для того, чтобы не тратить место на ненужную реализацию):

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Web.Script.Serialization;

namespace WebUI {
    public class DataRowConverter : JavaScriptConverter {
        private ReadOnlyCollection<Type> _supportedTypes = new ReadOnlyCollection<Type>(new Type[] { typeof(DataRow) });

        public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer) {
            // stuff
            return dr;
        }

        public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer) {
            // stuff
            return dictionary;
        }

        public override IEnumerable<Type> SupportedTypes {
            get {
                return this._supportedTypes;
            }
        }
    }
}

Кажется, что происходит, что класс действительно загружается (если мы возьмем его из web.config и ссылок на проект, точки останова не будут доступны; поместите его обратно в web.config и вручную скопируйте DLL / PDB или добавьте его в проект, точки останова доступны), но он не используется должным образом. Ни одна точка останова нигде в классе не достигнута, и никакие исключения (включая одно добавленное в конструктор, добавленное, чтобы увидеть, что происходит) не генерируются. Кажется, класс загружается, но никогда не вызывается.

Это на IIS 7.5 и IIS 7.0 в интегрированном режиме, если это имеет значение.

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 16 февраля 2010

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

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