我有一个使用自定义JavaScriptConverter的ASP.NET 3.5 SP1 Web应用程序.代码过去曾在某个时间工作,但已停止工作.我不知道中间服务器端发生了什么变化.我们现在看到的问题是没有调用转换器,因此我们收到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>
Run Code Online (Sandbox Code Playgroud)
该类的修剪版本如下(仅修剪以避免在不必要的实现上浪费空间):
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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
似乎发生的是该类确实被加载(如果我们从web.config和项目引用中取出它,没有可用的断点;将它放回到web.config并手动复制DLL/PDB或添加它到项目,断点是可用的),但它没有被使用属性.在类中的任何地方都没有命中断点,并且不会抛出任何异常(包括在构造函数中抛出的异常以查看发生的情况).好像这个类正在加载但从未调用过.
如果重要的话,这是在集成模式下的IIS 7.5和IIS 7.0上.
有人有主意吗?
归档时间: |
|
查看次数: |
1348 次 |
最近记录: |