首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >属性序列化/反序列化

属性序列化/反序列化
EN

Stack Overflow用户
提问于 2010-08-25 15:01:21
回答 4查看 301关注 0票数 0

我有一个存储由asp.net the服务器收集的数据的类。它包含几个属性,如:

代码语言:javascript
复制
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服务器收集的数据被写入文件。稍后,这些文件被读取并反序列化,属性数据需要离线导入数据库。

我的问题是,上面的代码是否会正确地序列化属性,从查询字符串中提取数据,然后在反序列化数据时正确地填充和返回属性?

我使用的是二进制序列化。

提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-25 15:31:11

我认为其他人已经建议你注意事项--为了使序列化起作用,你必须a)在序列化之前调用每个属性getter;b)在反序列化之后,必须将每个属性字段修改为某个非空默认值(例如String.Empty)。

现在,如果选项b是可行的

如果您只有一个这样的类,即在serialization.

  • If期间实现ISerializable和满足条件a&b,那么有许多这样的类,那么相对简单的解决方案可能是为您的类型创建一个可能使用反射的泛型serialization surrogate (用于进行属性get和字段设置),并确保在get期间满足条件a和b

如果b不可行,那么恐怕您别无选择,只能更新属性定义。

票数 0
EN

Stack Overflow用户

发布于 2010-08-25 15:07:34

根据序列化的上下文,属性ActionName在序列化时是否有值,因此在反序列化后是否会检索它。

但是,如果数据源在流程开始时就在Request.Params"action_name“中,那么您就不应该指望它能找回它的值。

票数 0
EN

Stack Overflow用户

发布于 2010-08-25 15:10:27

如果实例在ActionName属性至少读取一次之前被序列化,它将无法正确序列化。我会建议这些更改,但即使在这种情况下,您也必须绝对确定序列化是在请求线程上发生的(即。因此,您可以访问Request和Server)。

代码语言:javascript
复制
[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;
         }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3563515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档