技术心得:对象的序列化存入数据库,与反序列化

简介: 技术心得:对象的序列化存入数据库,与反序列化

"

开发过程中遇到一个问题,我想到的解决方法是将一个dictionary字典如何存如数据库,读出来的时候还是这个字典

然后接触到对象的序列化与反序列化。开始打算序列化成为xml的形式,因为sqlserver中有xml字段,可是dictionary无法进行序列化。那么就只能序列化成为二进制流存到数据库的image字段中

通过linqtosql回来的字段查看,其实image是binary形式的。

首先设计数据库的要存储的对象//代码效果参考:https://v.youku.com/v_show/id_XNjQwMDM2ODI4MA==.html

的字段为image类型

然后写一个序列化的类

例如:

1 【Serializable()】

2 public class PermissionModel

3 {

4 public Dictionary Dict = new Dictionary();

5 public void Add(string key,string value)

6 {

7 Dict.Add(key, value);

8 }

9 public void Clear()

10 {

11 Dict.Clear();

12 }

13 public void Remove(string key)

14 {

15 Dict.Remove(key);

16 }

17 }

之后就可以正常的像这个对象的字典中插入数据了。

1 PermissionModel model=new PermissionModel();

2 model.Add(""0"", ""1"");

3 ......

4 model.Add(""N"", ""N"");

通过下面的方法,可以将该对象序列化成为二进制流。

1 System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

2 System.IO.Stream stream = new System.IO.MemoryStream();

3 formatter.Serialize(stream, model);

4 stream.Flush();

5 stream.Position = 0;

6 byte【】 bytes = new byte【stream.Length】;

7 stream.Read(bytes, 0, Convert.ToInt32(stream.Length));

8 stream.Close();


//代码效果参考: https://v.youku.com/v_show/id_XNjQwNjgyMDM3Mg==.html

直接将bytes给数据库中的字段进行保存就好了。

下面进行反序列化。

1 System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

2 tPermissionModel perModel = 查询方法;

3 byte【】 bytes = null;

4 bytes = (byte【】)perModel.ModelObject.ToArray();

5 System.IO.Stream stream = new System.IO.MemoryStream(bytes);

6 PermissionModel obj = (PermissionModel)formatter.Deserialize(stream);

7 stream.Close();

通过上面这个方法查询回来的并进行反序列化后的obj就是之前存入数据库中的对象。

dictionary的遍历方法。

1 foreach (KeyValuePair entry in obj.Dict)

2 {

3 //enery.Key and entry.Value

4 }

只是不知道我这样的写法是不是好的方法呢。因为没时间去验证效率什么的。


"
image.png
相关文章
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
|
2月前
|
存储 关系型数据库 分布式数据库
|
2月前
|
存储 关系型数据库 分布式数据库
|
8天前
|
存储 人工智能 关系型数据库
诚邀您参加《智启云存:AI时代数据库RDS存储新突破》线上闭门技术沙龙!
诚邀您参加6月11日(周三)14:00在线上举行的《智启云存:AI时代数据库RDS存储新突破》闭门活动。免费报名并有机会获得精美礼品,快来报名吧:https://hd.aliyun.com/form/6162
|
18天前
|
人工智能 关系型数据库 分布式数据库
媒体声音|从亚太到欧美,阿里云瑶池数据库凭何成为中企出海的技术底气?
在中企出海的时代浪潮中,瑶池数据库正凭借其技术创新、场景化解决方案、智能化能力、全球化布局,成为企业跨越挑战、构建全球竞争力的关键伙伴;同时也以硬核的技术实力证明了中国数据库的国际竞争力。
|
24天前
|
安全 Apache 数据库
【倒计时3天】NineData x Apache Doris x 阿里云联合举办数据库技术Meetup,5月24日深圳见!
5月24日,NineData联合Apache Doris与阿里云在深圳举办数据库技术Meetup。活动聚焦「数据实时分析」与「数据同步迁移」两大领域,邀请行业专家分享技术趋势、产品实践及解决方案,助力企业构建高效安全的数据管理体系。时间:14:00-17:30;地点:深圳新一代产业园2栋20楼会议室。线下名额有限(80人),速报名参与深度交流!
45 1
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:弹性并行查询(ePQ)篇
阿里云PolarDB云原生数据库在TPC-C基准测试中刷新了性能和性价比的世界纪录,达到每分钟20.55亿笔交易(tpmC),单位成本仅0.8元人民币。PolarDB采用云原生架构,支持数千节点横向扩展,具备弹性并行查询(ePQ)功能,可显著加速复杂查询。此外,PolarDB还推出了国产轻量版,以软件形式部署,满足多样化需求。
|
2月前
|
存储 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:高可用-无感切换篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,单位成本仅0.8元人民币。PolarDB通过VotingDisk实现秒级故障切换,RPO=0,提供高可用性。PolarDB还推出国产轻量版,兼具高性能与低成本,满足多样化需求。
|
2月前
|
存储 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:成本优化-软硬协同篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以超越原记录2.5倍的性能登顶排行榜,实现每分钟20.55亿笔交易,单位成本仅0.8元人民币,刷新性能与性价比双纪录。此外,还介绍了国产轻量版PolarDB MySQL的推出,满足市场对高性价比的需求。