对象的序列化存入数据库,与反序列化

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

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

首先设计数据库的要存储的对象的字段为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();

直接将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 }

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



http://luacloud.com/2010/%E5%AF%B9%E8%B1%A1%E7%9A%84%E5%BA%8F%E5%88%97%E5%8C%96%E5%AD%98%E5%85%A5%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%8C%E4%B8%8E%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96.html

posted @   ojdev  阅读(1829)  评论(2编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示