2009-12-22 3 views
6

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

Ниже приводится соответствующая часть 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> 

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

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 вручную или добавьте его к проекту, точки останова доступны), но это не bein г. Ни одна точка останова в классе не попадает, и никаких исключений (в том числе брошенных в конструкторе, добавленных для просмотра того, что происходит) бросается. Кажется, что класс загружается, но никогда не вызывается.

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

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

ответ

0

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

+0

@MikeBaz - вы должны отметить, что ваш ответ принят. Верно. –

Смежные вопросы