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

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

"

开发过程中遇到一个问题,我想到的解决方法是将一个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
相关文章
|
5月前
|
存储 安全 IDE
说一说序列化与反序列化中存在的问题
本文详细解析了Java中的序列化机制,包括序列化的概念、实现方式及应用场景。通过Student类的实例演示了对象的序列化与反序列化过程,并分析了`Serializable`接口的作用以及`serialVersionUID`的重要意义。此外,文章还探讨了如何通过自定义`readObject()`方法增强序列化的安全性,以及解决可序列化单例模式中可能产生的多实例问题。最后提供了代码示例和运行结果,帮助读者深入理解序列化的原理与实践技巧。
122 2
|
5月前
|
JSON JavaScript 前端开发
Go语言JSON 序列化与反序列化 -《Go语言实战指南》
本文介绍了 Go 语言中使用 `encoding/json` 包实现 JSON 与数据结构之间的转换。内容涵盖序列化(`Marshal`)和反序列化(`Unmarshal`),包括基本示例、结构体字段标签的使用、控制字段行为的标签(如 `omitempty` 和 `-`)、处理 `map` 和切片、嵌套结构体序列化、反序列化未知结构(使用 `map[string]interface{}`)以及 JSON 数组的解析。最后通过表格总结了序列化与反序列化的方法及类型要求,帮助开发者快速掌握 JSON 数据处理技巧。
|
7月前
|
存储 SQL 数据库
【赵渝强老师】达梦数据库的数据库对象
达梦数据库包含基本与复杂两大类数据库对象。基本对象如表、索引、视图、序列和同义词,通过单一DDL语句创建和管理。表是数据存储核心,支持多种数据类型;索引提升查询速度,常见类型包括聚集、唯一、函数等索引;视图提供虚表功能;序列生成有序整数;同义词简化对象访问。复杂对象包括存储过程、函数和触发器,需用DMSQL语言开发,适用于更复杂的业务逻辑处理。文中通过实例详细介绍了各类对象的创建与使用方法。
324 3
|
11月前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
11月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
357 1
|
11月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
11月前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
485 0
|
23天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
58 3
|
29天前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
16天前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。