Asp.net IDataReader序列化错误

Asp.net IDataReader序列化错误,asp.net,serialization,idatareader,Asp.net,Serialization,Idatareader,我有一个ASP.NET页面,其中包含一个Gridview 我正在尝试将IDataReader对象绑定到网格。这个IDataReader对象是通过调用更多的代码层(实际上是形成控制器层和DB层的其他.ent项目DLL)来分配的,然后最终绑定到我的网格 在gridview1.Datasource=dr(dr是我的IDataReader),我看不出有任何问题 但在gridview1.Databind行,我得到一个异常,异常对象中的详细信息如下: {“类型”System.Data.Common.DbEn

我有一个ASP.NET页面,其中包含一个
Gridview

我正在尝试将
IDataReader
对象绑定到网格。这个
IDataReader
对象是通过调用更多的代码层(实际上是形成控制器层和DB层的其他.ent项目DLL)来分配的,然后最终绑定到我的网格

gridview1.Datasource=dr
(dr是我的IDataReader),我看不出有任何问题

但在gridview1.Databind行,我得到一个异常,异常对象中的详细信息如下:

{“类型”System.Data.Common.DbEnumerator'在程序集'System.Data,版本=2.0.0.0,区域性=neutral,PublicKeyToken=b77a5c561934e089'中未标记为可序列化。“}

我不确定申请表中出了什么问题。有什么想法或意见吗

编辑1 添加stacktrace异常:

Server stack trace: at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) at System.Runtime.Remoting.Channels.CoreChannel.SerializeBinaryMessage(IMessage msg, Stream outputStream, Boolean includeVersions) at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.SerializeResponse(IServerResponseChannelSinkStack sinkStack, IMessage msg, ITransportHeaders& headers, Stream& stream) at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at System.Collections.IEnumerable.GetEnumerator() at System.Collections.IEnumerable.GetEnumerator() at System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) at System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) at System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) at System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) at System.Web.UI.WebControls.DataBoundControl.PerformSelect() at System.Web.UI.WebControls.BaseDataBoundControl.DataBind() at System.Web.UI.WebControls.GridView.DataBind() at Drive.CampaignManager.CreateQuery.GridViewBind() in Mycode.aspx.cs 服务器堆栈跟踪: at System.Runtime.Serialization.FormatterServices.InternalGetSerializationMembers(RuntimeType类型) at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(类型,StreamingContext上下文) 在System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()中 在System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(对象obj、ISurrogateSelector代理选择器、StreamingContext上下文、SeroObjectInfo初始化SeroObjectInfo初始化、FormatterConverter转换器、ObjectWriter ObjectWriter) 在System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serializate(对象obj、ISurrogateSelector代理选择器、StreamingContext上下文、SeroObjectInfo init SeroObjectInfo init、FormatterConverter转换器、ObjectWriter ObjectWriter) 在System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serializate(对象图,头[]inHeaders,\uu BinaryWriter serWriter,布尔fCheck) 在System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serializate(流序列化流,对象图,头[]头,布尔fCheck) at System.Runtime.Remoting.Channels.CoreChannel.SerializeBinaryMessage(IMessage msg、Stream outputStream、Boolean includeVersions) 在System.Runtime.Remoting.Channels.BinaryServerFormatterSink.SerializeResponse(IServerResponseChannelSinkStack,IMessage msg,ITransportHeaders&headers,Stream&Stream) 在System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack、IMessage requestMsg、ITransportHeaders requestHeaders、Stream requestStream、IMessage&responseMsg、ITransportHeaders&responseHeaders、Stream&responseStream) 在[0]处重试异常: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg) at System.Runtime.Remoting.proxy.RealProxy.PrivateInvoke(MessageData&msgData,Int32类型) 位于System.Collections.IEnumerable.GetEnumerator()处 位于System.Collections.IEnumerable.GetEnumerator()处 位于System.Web.UI.WebControl.GridView.CreateChildControls(IEnumerable数据源,布尔数据绑定) 位于System.Web.UI.WebControl.CompositeDataBoundControl.PerformDataBinding(IEnumerable数据) 位于System.Web.UI.WebControl.GridView.PerformDataBinding(IEnumerable数据) 在System.Web.UI.WebControl.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable数据)中 在System.Web.UI.DataSourceView.Select(DataSourceSelectArguments参数,DataSourceViewSelectCallback回调) 在System.Web.UI.WebControls.DataBoundControl.PerformSelect()中 在System.Web.UI.WebControls.BaseDataBoundControl.DataBind()中 在System.Web.UI.WebControls.GridView.DataBind()中 在Drive.activitmanager.CreateQuery.GridViewBind()中 在Mycode.aspx.cs中
无法从上面的堆栈跟踪中了解太多信息。

查看异常的堆栈跟踪。它将向您显示什么代码试图序列化
DbEnumerator

从读取您发布的堆栈跟踪中,看起来您的层之间正在进行远程处理-此代码是否在多台计算机上运行?不能跨远程边界传递不可序列化的类,如DataReader(SqlDataReader、EntityDataReader等)(如果您在美国:-),也可以序列化)

您需要一种不同的设计来实现这一点,一种在代码层之间传递可序列化对象的设计。传递数据集可能是使UI代码工作的最简单的方法,因为您只需替换

gridview1.Datasource = dr


菲尔:我能从你说的话中理解一些东西。在我的web解决方案中,控制器层和数据访问层是独立的项目。但是数据访问层正在调用一些与框架相关的对象(由某人编写)及其方法。我对这个框架不太了解,因为我们提供一些输入,比如表名或id,然后它获取输出。因此,我仅怀疑该区域,该层返回的IDataReader是否完全不可序列化。我需要仔细研究一下。我想一下。谢谢你的评论。你的猜测是正确的。它的远程处理。我的数据阅读器实际上是从dataaccesslayer返回datareader,dataaccesslayer实际上位于不同的域中,或者说它在我的应用程序边界之外。所以我得到了序列化错误。感谢您为我提供了检查问题的正确方向。现在,我将datareader加载到一个带有数据访问层的表中,并在我的应用程序中使用datatable,这非常有效。谢谢,这是公认的答案:)
gridview1.DataSource = ds