Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET页面更改导致会话中的对象数组无法强制转换到它';她自己的类型?_Asp.net_Vb.net_Session_Session State - Fatal编程技术网

ASP.NET页面更改导致会话中的对象数组无法强制转换到它';她自己的类型?

ASP.NET页面更改导致会话中的对象数组无法强制转换到它';她自己的类型?,asp.net,vb.net,session,session-state,Asp.net,Vb.net,Session,Session State,我正在我的站点上的会话中存储自定义可序列化类的数组。当站点上的某个页面发生更改时,它会突然使其无效,并告诉我它无法将该类型强制转换为它自己的类型。我猜班级版本号在变还是怎么的 我希望避免回答“不要使用会话”,除非这是一个非常简单的解决方案。我不想重新设计整个过程 Unable to cast object of type 'ShipmentPackages[]' to type 'ShipmentPackages[]'. Description: An unhandled exception

我正在我的站点上的会话中存储自定义可序列化类的数组。当站点上的某个页面发生更改时,它会突然使其无效,并告诉我它无法将该类型强制转换为它自己的类型。我猜班级版本号在变还是怎么的

我希望避免回答“不要使用会话”,除非这是一个非常简单的解决方案。我不想重新设计整个过程

Unable to cast object of type 'ShipmentPackages[]' to type 'ShipmentPackages[]'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidCastException: Unable to cast object of type 'ShipmentPackages[]' to type 'ShipmentPackages[]'.

Source Error: 


Line 21:         Else
Line 22:             If Not Session("ShipmentList") Is Nothing Then
Line 23:                 ShipmentList = DirectCast(Session("ShipmentList"), ShipmentPackages()).ToList
Line 24:             End If
Line 25:         End If

我自己也看到过很多次这条信息,非常烦人!正如您所指出的,这可能是因为程序集版本发生了更改。在Asp.Net中,当页面更改时,代码将重新编译。根据放置的位置,类将决定是否使用页面重新编译该类。我建议将任何“模型”类型的类移动到单独的项目中。这将避免此问题以及混合视图/控制器和模型代码的冲动:)

您还可以尝试将对象序列化为XML会话。如果这样做,即使程序集发生了更改,也应该能够对其进行反序列化,尽管对象的属性发生了更改


我知道你说你不想听这个,但是你也可以考虑不要把对象放在会话中。这使得在必要时很难扩展应用程序。你越早解决这个问题,它就越容易解决。

几天前,我也对这个问题感到恼火。唉,Brian的第一个解决方案只有在您不需要再次编译“模型项目”的情况下才有效。如果您这样做(由于错误修复等原因)并更新正在运行的应用程序(用户在更新过程中保持会话,在我的情况下是怎么做的),您将再次得到异常:-(


在我的特例中,最好的解决方案非常简单!我将“DirectCast”更改为“TryCast”。如果assemblyversion更改并且强制转换失败,TryCast将不返回任何内容。在这种情况下,或者如果我尚未将字典/集合写入会话,我将(再次)获取数据然后在数据库上进行存储。下次强制转换将起作用;-)!另一个要点是,如果对象的接口发生变化,这也会起作用

您是否有可能在这里有多个命名空间?可能是一个web服务客户机和一个具有相同类型名称的引用程序集?不,这段代码在对该页面进行编辑之间可以正常工作。一旦编辑完成,会话中的内容将不再匹配。。。当asp.net重新编译页面时,它是否将类呈现为新版本或其他内容?我想即使如此,它还是可以转换/铸造的。