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

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

"

开发过程中遇到一个问题,我想到的解决方法是将一个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月前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
2月前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
33 0
|
3月前
|
JSON 缓存 NoSQL
Redis 在线查看序列化对象技术详解
Redis 在线查看序列化对象技术详解
53 2
|
4月前
|
SQL 关系型数据库 数据库连接
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
本文介绍了PHP中PDO(PHP Data Objects)扩展的基本概念和使用方法。内容包括PDO类和PDOStatement类的介绍,PDO的简单使用,预定义占位符的使用方法,以及PDOStatement对象的使用。文章还讨论了绑定预定义占位符参数的不同形式,即bindValue和bindParam的区别。通过具体示例,展示了如何使用PDO进行数据库连接、数据查询、数据插入等操作。
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
|
5月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
74 1
|
5月前
|
数据库连接 数据库
实现加载驱动、得到数据库对象、关闭资源的代码复用,将代码提取到相应的工具包里边。优化程序
该博客文章展示了如何通过创建工具类`Connectiontools`实现数据库连接、语句执行以及资源关闭的代码复用,以优化程序并提高数据库操作的效率和安全性。
|
5月前
|
存储 SQL 数据库
【计算机三级数据库技术】第7章 数据库及数据库对象--附思维导图
文章概述了数据库的创建、维护、架构、分区表、索引和索引视图的操作要点,并提供了SQL Server环境下的具体T-SQL命令示例。内容涵盖了数据库文件的管理、架构的使用、分区表的创建和优化、索引的创建与删除,以及索引视图的定义和应用场景。
46 2
|
5月前
|
SQL 关系型数据库 数据库
手把手教你管理PostgreSQL数据库及其对象
手把手教你管理PostgreSQL数据库及其对象
143 0
|
5月前
|
SQL 数据库
拒绝了对对象 ‘GetTips‘ (数据库 ‘vipsoft‘,架构 ‘dbo‘)的 EXECUTE 权限
拒绝了对对象 ‘GetTips‘ (数据库 ‘vipsoft‘,架构 ‘dbo‘)的 EXECUTE 权限
62 0

热门文章

最新文章