사용자 지정 JavaScriptConverter를 사용하는 ASP.NET 3.5 SP1 웹 응용 프로그램이 있습니다. 과거에 코드가 사용되었지만 작동을 멈췄습니다. 나는 중간 서버 측에서 어떤 변화가 일어 났는지 모른다. 우리가 지금보고있는 문제는 변환기가 호출되지 않아서 System.Data.DataRow를 직렬화 할 수 없다는 오류가 발생한다는 것입니다.ASP.NET Javascript 변환기가 호출되지 않는 것 같습니다.
<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>
A는 클래스의 버전을 트리밍 다음 (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 및 프로젝트 참조에서 가져온다면 중단 점을 사용할 수 없으므로 다시 web.config에 넣고 DLL/PDB를 손으로 복사하거나 추가합니다 프로젝트에 중단 점을 사용할 수 있음). g는 유용하게 사용되었습니다. 클래스의 아무 곳이나 중단 점이 발생하지 않으며 예외가 발생하지 않습니다 (예외가 발생하면 생성자에 던져진 예외 포함). 클래스가로드되고 있지만 호출 된 적이없는 것처럼 보입니다.
중요한 점은 IIS 7.5 및 IIS 7.0 통합 모드입니다.
누구든지 아이디어가 있습니까?
@MikeBaz - 답변을 수락해야합니다. 맞습니다. –