旧版ASP.NET ASMX Web服务中获取应用级JavaScriptSerializer方法
旧版ASP.NET ASMX Web服务注册自定义JavaScriptSerializer转换器方案
方法一:单个Web服务类内重写序列化器(服务级控制)
在你的MyWS类中重写GetScriptSerializer方法,返回已添加自定义转换器的JavaScriptSerializer实例,该服务下所有标记[ScriptMethod]的方法都会使用这个序列化器:
public class MyWS : System.Web.Services.WebService { protected override JavaScriptSerializer GetScriptSerializer() { var serializer = base.GetScriptSerializer(); // 注册自定义转换器,替换为你的转换器实例 serializer.RegisterConverters(new List<JavaScriptConverter> { new YourCustomConverter() }); return serializer; } [WebMethod(EnableSession = true)] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public YourReturnType YourWebMethod() { // 业务逻辑代码 return yourDataObject; } }
方法二:全局配置(应用级所有ASMX服务生效)
通过Web.config配置全局JSON序列化规则,所有使用JavaScriptSerializer的ASMX服务都会自动加载自定义转换器:
在Web.config的<configuration>节点内添加以下配置:
<system.web.extensions> <scripting> <webServices> <jsonSerialization> <converters> <!-- 替换为你的转换器类完全限定名(命名空间+类名)和程序集名称 --> <add name="YourCustomConverter" type="YourNamespace.YourCustomConverter, YourAssemblyName" /> </converters> </jsonSerialization> </webServices> </scripting> </system.web.extensions>
多个自定义转换器可添加多个<add>节点。
补充:特定方法手动序列化
如果仅需对个别方法做自定义序列化,可在WebMethod内手动创建序列化器并输出结果:
[WebMethod(EnableSession = true)] [ScriptMethod(ResponseFormat = ResponseFormat.None)] public void CustomSerializedMethod() { var targetData = yourTargetData; var serializer = new JavaScriptSerializer(); serializer.RegisterConverters(new List<JavaScriptConverter> { new YourCustomConverter() }); string jsonResult = serializer.Serialize(targetData); Context.Response.ContentType = "application/json"; Context.Response.Write(jsonResult); }
注:自定义转换器需继承
JavaScriptConverter抽象类,实现Serialize、Deserialize方法,并指定支持转换的类型。
内容的提问来源于stack exchange,提问作者MPelletier
相关产品推荐
相关产品推荐

