代码之家  ›  专栏  ›  技术社区  ›  MikeBaz - MSFT

似乎未调用ASP.NET JavaScript转换器

  •  6
  • MikeBaz - MSFT  · 技术社区  · 15 年前

    我有一个使用自定义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>
    

    类的修剪版本如下(仅修剪以避免在不必要的实现上浪费空间):

    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或将其添加到项目中,则断点可用),但它没有被正确地使用。类中的任何地方都不会命中断点,也不会引发异常(包括在添加的构造函数中引发的异常,以查看会发生什么)。似乎正在加载类,但从未调用。

    这在集成模式下的IIS 7.5和IIS 7.0上,如果重要的话。

    有人有什么想法吗?

    1 回复  |  直到 12 年前
        1
  •  0
  •   MikeBaz - MSFT    15 年前

    好的,为了防止其他人点击,当通过自动生成的测试页调用Web服务时,不会调用自定义序列化程序——它们被绕过。这显然是故意的。