2009-12-22 16 views
6

Ho un'applicazione Web ASP.NET 3.5 SP1 che utilizza un JavaScriptConverter personalizzato. Il codice funzionava in passato, ma ha smesso di funzionare. Non so quali cambiamenti siano avvenuti sul lato del server centrale. Il problema che stiamo vedendo ora è che il convertitore non viene invocato, quindi stiamo ricevendo errori che System.Data.DataRow non può essere serializzato.ASP.NET Javascript Converter non sembra essere invocato

Quello che segue è la quota di competenza di 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> 

Una versione della classe rifilata è la seguente (tagliati solo per evitare di sprecare spazio sull'attuazione 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; 
      } 
     } 
    } 
} 

Ciò che sembra accadere è che la classe viene effettivamente caricata (se la estrapiamo da web.config e dai riferimenti al progetto, non sono disponibili punti di interruzione, rimettila in web.config e copia manualmente la DLL/PDB o aggiungila al progetto, i punti di interruzione sono disponibili), ma non è così g usato in modo propositivo Nessun punto di interruzione in qualsiasi parte della classe viene colpito, e non vengono lanciate eccezioni (inclusa quella generata da un costruttore aggiunto per vedere cosa succede). Sembra che la classe venga caricata ma mai chiamata.

Questo è su IIS 7.5 e IIS 7.0 in modalità integrata, se è importante.

Qualcuno ha qualche idea?

risposta

0

OK, nel caso in cui qualcun altro lo colpisca, quando chiama i servizi Web attraverso le pagine di test generate automaticamente, i serializzatori personalizzati non vengono richiamati - vengono ignorati. Questo è apparentemente dal design.

+0

@MikeBaz - si dovrebbe contrassegnare la risposta accettata. È corretto. –

Problemi correlati