我有一个存储由asp.net the服务器收集的数据的类。它包含几个属性,如:
private string _actionName;
public string ActionName
{
get
{
if (_actionName == null)
_actionName = Request.Params["action_name"] != null
? Server.UrlDecode(Request.Params["action_name"])
: "";
return _actionName;
}
}这个类被序列化为一个文件。基本上,the服务器收集的数据被写入文件。稍后,这些文件被读取并反序列化,属性数据需要离线导入数据库。
我的问题是,上面的代码是否会正确地序列化属性,从查询字符串中提取数据,然后在反序列化数据时正确地填充和返回属性?
我使用的是二进制序列化。
提前谢谢。
发布于 2010-08-25 15:31:11
我认为其他人已经建议你注意事项--为了使序列化起作用,你必须a)在序列化之前调用每个属性getter;b)在反序列化之后,必须将每个属性字段修改为某个非空默认值(例如String.Empty)。
现在,如果选项b是可行的
如果您只有一个这样的类,即在serialization.
如果b不可行,那么恐怕您别无选择,只能更新属性定义。
发布于 2010-08-25 15:07:34
根据序列化的上下文,属性ActionName在序列化时是否有值,因此在反序列化后是否会检索它。
但是,如果数据源在流程开始时就在Request.Params"action_name“中,那么您就不应该指望它能找回它的值。
发布于 2010-08-25 15:10:27
如果实例在ActionName属性至少读取一次之前被序列化,它将无法正确序列化。我会建议这些更改,但即使在这种情况下,您也必须绝对确定序列化是在请求线程上发生的(即。因此,您可以访问Request和Server)。
[NonSerialized]
private string _actionName;
public string ActionName
{
get
{
if (_actionName == null)
_actionName = Request.Params["action_name"] != null
? Server.UrlDecode(Request.Params["action_name"])
: "";
return _actionName;
}
set
{
_actionName= value;
}
}https://stackoverflow.com/questions/3563515
复制相似问题