基于C#实现对象序列化的3种方案
大家好!我是付工。
在上位机开发过程中,我们可能经常要实现一个数据对象的持久化,将对象保存到具体的文件中,今天给大家介绍常用的3种方案,大家根据实际情况,选择适合的方案。
一、准备工作
在介绍这4种方案之前,我们以西门子PLC信息存储为例,先提前准备好一个类——PLCInfo,代码如下所示:
我们通过序列化可以将对象转换成一个字符串进行存储,同时通过反序列化可以将该字符串转成一个对象,对象序列化与反序列化是一个相互转换的过程。
在上面的代码中,为了可以观察到反序列化的结果,我们在该实体类中重写一下ToString方法,然后实例化一个PLCInfo对象,后续就针对这个对象进行操作,代码如下所示:
二、二进制序列化
二进制序列化及反序列化的方式主要是使用BinaryFormatter这个类,序列化方法代码如下:
反序列化方法代码如下:
测试结果如下:
分析:我们可以看到二进制序列化的结果是一串乱码,但是可以正常反序列化成一个对象。通过二进制序列化的优势是比较简单,甚至还能加密,但是劣势在于结果比较长,可读性比较差,在实体类中要加个[Serializable]特性标识。
三、Xml序列化
Xml序列化及反序列化的方式主要是使用XmlSerializer这个类,序列化方法代码如下:
反序列化方法代码如下:
测试结果如下:
分析:我们可以看到Xml序列化的结果可读性比二进制要好很多,但是相比后面的Json还是相对复杂一些。
四、Json序列化
Json序列化及反序列化的方式主要是使用Newtonsoft.Json这个库,可以通过Nuget安装,并添加引用,使用非常简单,序列化及反序列化方法代码如下:
测试结果如下:
分析:我们可以看到Json序列化的结果相对于Xml来说要更加简洁一些,这也是为什么Json使用越来越多的原因。