站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
SPB-设计机制-序列化字段
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
高级
特殊字符
帮助
标题
2级
3级
4级
5级
格式
插入
拉丁字母
扩展拉丁字母
国际音标
符号
希腊字母
希腊字母扩展
西里尔字母
阿拉伯字母
扩展阿拉伯字母
希伯来字母
孟加拉语字符集
泰米尔数字和符号
泰卢固语字符集
僧伽罗语字符集
梵文字符集
古吉拉特语字符集
泰语字符集
老挝语
高棉语字母
加拿大原住民音节文字
卢恩
Á
á
À
à
Â
â
Ä
ä
Ã
ã
Ǎ
ǎ
Ā
ā
Ă
ă
Ą
ą
Å
å
Ć
ć
Ĉ
ĉ
Ç
ç
Č
č
Ċ
ċ
Đ
đ
Ď
ď
É
é
È
è
Ê
ê
Ë
ë
Ě
ě
Ē
ē
Ĕ
ĕ
Ė
ė
Ę
ę
Ĝ
ĝ
Ģ
ģ
Ğ
ğ
Ġ
ġ
Ĥ
ĥ
Ħ
ħ
Í
í
Ì
ì
Î
î
Ï
ï
Ĩ
ĩ
Ǐ
ǐ
Ī
ī
Ĭ
ĭ
İ
ı
Į
į
Ĵ
ĵ
Ķ
ķ
Ĺ
ĺ
Ļ
ļ
Ľ
ľ
Ł
ł
Ń
ń
Ñ
ñ
Ņ
ņ
Ň
ň
Ó
ó
Ò
ò
Ô
ô
Ö
ö
Õ
õ
Ǒ
ǒ
Ō
ō
Ŏ
ŏ
Ǫ
ǫ
Ő
ő
Ŕ
ŕ
Ŗ
ŗ
Ř
ř
Ś
ś
Ŝ
ŝ
Ş
ş
Š
š
Ș
ș
Ț
ț
Ť
ť
Ú
ú
Ù
ù
Û
û
Ü
ü
Ũ
ũ
Ů
ů
Ǔ
ǔ
Ū
ū
ǖ
ǘ
ǚ
ǜ
Ŭ
ŭ
Ų
ų
Ű
ű
Ŵ
ŵ
Ý
ý
Ŷ
ŷ
Ÿ
ÿ
Ȳ
ȳ
Ź
ź
Ž
ž
Ż
ż
Æ
æ
Ǣ
ǣ
Ø
ø
Œ
œ
ß
Ð
ð
Þ
þ
Ə
ə
格式
链接
标题
列表
文件
参考
讨论
说明
输入内容
输出结果
斜体
''斜体文字''
斜体文字
粗体
'''粗体文字'''
粗体文字
粗斜体
'''''粗斜体文字'''''
粗斜体文字
<span style="text-align:center; border:1px solid #000; float:right; padding:6px;"><strong>导航:</strong> [[SpaceBuilde二次开发手册|上一页]]</span> <div style="clear:both;"></div> 在产品的不断完善过程中或者二次开发过程中,经常需要对现有的对象增加新的属性。通常情况下,为了应对这些变化需要在数据库的相应表中预留字段(当然不预留字段就需要修改[[数据库]]中的表、修改相应的存储过程或[[sql]]语句、修改数据访问层…),然后在使用时赋予具体的含义。 这样做最常见的一个结果就是使数据库中的一些字段异常混乱。 在[[SpaceBuilder]]中,我们针对这种需求使用了序列化字段,下面介绍数据序列化的原理及如何使用数据序列化。 '''一、数据库的存储格式''' 在数据库中的存储格式如下图所示,所有需要序列化的数据全部存储到PropertyNames(存储属性名称及PropertyValues中对应的存储位置)、PropertyValues(存储属性的具体数据)两个字段中。 先分析一下存储的数据,首先是PropertyNames字段 “EnableRatings:S:0:4:EnableTrackBacks:S:4:4:CommentModerationType:S:8:4:” ,“EnableRatings”其实是在实体类中定义的一个属性名称,“:”表示定义完毕,“S:0:4”表示在PropertyValues字段中的字符从0开始后面4位属于“EnableRatings”的属性值,同理:“S:4:4”表示,从第四个字符开始,后面5个表示“EnableTrackBacks”的属性值,依次类推可以获得PropertyNames所有的字段的值。(其中S代表存储格式是字符串,由于目前全部以字符串存储所以不需特别关注)。 这样我们就利用PropertyNames、PropertyValues两个字段存储任意多个数据项,而且不用对操作数据库的存储过程或sql语句做任何更改,这就为SpaceBuilder的数据序列化奠定了数据存储基础。 [[Image:Spacebuilder091.jpg]] '''设计参考''': 借鉴了[[asp.net]] 2.0的Profile。Profile的功能是管理用户个人资料,而用户个人资料在不同的项目中会有不同的需求(比如:年龄、性别、兴趣、爱好、毕业院校…),而Profile作为一个通用的功能必须满足这些具体的需求,它同样采取了类似的数据存储结构,如下图所示。 Profile采用了3个字段对扩展属性进行存储: #PropertyNames同样存储属性名称及在PropertyValuesString或PropertyValuesBinary中的相应数据的存储位置,并以S及B确定数据是以字符串形式还是二进制形式存储; #PropertyValuesString存储属性的字符串数据; #PropertyValuesBinary存储属性的[[二进制]]数据; [[Image:Spacebuilder092.jpg]] 当然Profile为了做到更加容易对Profile扩展新的属性,还支持在web.config中通过配置文件来增加新属性。 '''二、如何使用数列化数据''' *首先确保需要使用序列化字段的实体类从SpaceBuilder.Common.ExtendedAttributes派生。 例如:User,如下图所示: [[Image:Spacebuilder093.jpg]] ExtendedAttributes主要方法如下: [[Image:Spacebuilder094.jpg]] 在ExtendedAttributes的派生类我们可以方便的通过GetBool、GetInt、GetDouble、GetString、GetExtendedAttribute<T>获取相应的属性值。GetSerializerData、SetSerializerData一般用于把对象存储到数据库,或从数据库取出数据并生成对象的过程使用(参见2)。 '''例如''',我们可以定义AvatarUrl序列化属性,该属性的代码如下: <pre> /// <summary> /// 用户头像文件名称 /// </summary> public string AvatarUrl { get { return GetExtendedAttribute("avatarUrl"); } set { SetExtendedAttribute("avatarUrl", value); } </pre> } *在数据库的表中增加PropertyNames、PropertyValues两个字段,一般设置PropertyNames、PropertyValues的类型为ntext。 进行对象持久化时(即存储到数据库),需要编写如下代码: <pre> SerializerData data = user.GetSerializerData(); myCommand.Parameters.Add("@PropertyNames", SqlDbType.NText).Value = data.Keys; myCommand.Parameters.Add("@PropertyValues", SqlDbType.NText).Value = data.Values; </pre> 从数据库取出数据生成对象时,一般需要编写如下代码: <pre> SerializerData data = new SerializerData(); if (dr["PropertyNames"] == DBNull.Value) data.Keys = ""; else data.Keys = dr["PropertyNames"] as string; if (dr["PropertyValues"] == DBNull.Value) data.Values = ""; else data.Values = dr["PropertyValues"] as string; user.SetSerializerData(data); </pre> ==参考资料== *[http://doc.spacebuilder.cn SpaceBuilder官方] [[category:SpaceBuilder|S]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)