对象的序列化存入数据库,与反序列化
开发过程中遇到一个问题,我想到的解决方法是将一个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 }
只是不知道我这样的写法是不是好的方法呢。因为没时间去验证效率什么的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库