日期:2014-05-19  浏览次数:20465 次

程序报错,说我自定义的类不支持viewstate序列号,请问怎么解决.
本来我是用session的,结果发现数据老丢失,所以想换成viewstate,但是报错,说不支持序列化,要怎样改写这个实体类才支持序列号?

要加个什么东东?

------解决方案--------------------
http://msdn2.microsoft.com/zh-cn/library/system.runtime.serialization.iserializable(VS.80).aspx

http://www.cnblogs.com/wdxinren/archive/2004/10/23/55826.html

http://book.chinaz.com/others/web/web/aspnet/index2/16.htm

等等。


不过,Session中的东西放到ViewState中,没有道理,对数据的作用域一致性要求根本不一样,实在差别太大。
------解决方案--------------------
asp.net的Session还已经现成地具有状态服务器、使用SQL Server数据库的管理方法。

如果要自己写一种,那么大概这样定义:

class abstract mySession
{
abstract public void Set(string SessionID,string Key,object Data);
abstract public object Get(string SessionID,string Key);
}

就可以了,似乎自己写一个自己的Session集合管理程序非常简单。你可以使用任何办法去实现Set和Get,可以针对数据库、XML等等各种存储方法。当然,最好应该自动进行数据缓冲。

------解决方案--------------------
那是因为Session过期了,你可以看看过期时间的设置
------解决方案--------------------
http://aspalliance.com/1182_Troubleshooting_Session_Related_Issues_in_ASPNET

http://blogs.msdn.com/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx

session和viewstate生存周期和作用范围是不一样的,建议还是看看上面的文章,找出session丢失的原因
------解决方案--------------------
简单序列化类,增加[Serializable]标记即可。
Session丢失的问题可能跟你调试有关系。
debug 状态可以设置web.config 中 cookieless =true;