博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习之路二十七:三种序列化方式的一些注意点
阅读量:6820 次
发布时间:2019-06-26

本文共 1836 字,大约阅读时间需要 6 分钟。

前段时间项目中有一个这样的需求:需要在Service挂掉的情况下保存内存中的数据!

因为我们的内存其实是一个结构比较复杂的对象,嵌套的比较复杂,在没有编码之前把任务计划都安排好了,方案是对内存对象进行JSON序列化之后保存到本地文件中去,其实想想挺简单的,可是在实际编码的时候还是遇到了很多关于序列化方面的问题,最大的原因就是我们对每一种序列化方式还理解的不够!

下面就说说一些常用的序列化方式,文中可能会代码比较少,主要说一些注意点!

1.二进制序列化

  优点:只要是标记了[Serializable]序列化特性,那么这个对象里面的任何东西(私有的,公共的)都会被序列化成二进制!

  限制点:这种序列化方式就像眉毛胡子一把抓,不管什么东西就会被序列化,而且保存到文件的内容都是二进制没有任何可查看的意义 - 看不懂啊!

      不过我们也可以通过[NonSerialized]设置哪些可以序列化,哪些不要序列化的!

2.JSON序列号

  优点:跨平台数据传输,而且序列化之后的结构清晰易于解析!

  限制点:可是我们在序列化的时候发现有这样一个问题(使用的fastJSON类库):

      ①如果对象中有没有无参的构造函数,就会报错(就是在底层代码在反射该对象时会报错)

        如果使用.NET自带的JSON转化类也会出现这样的问题!

3.XML序列化

  优点:跨平台数据传输,结构清晰,.NET有强大的类库支持!

  限制点:可是有的时候却不是万能的,因为它有两点点如下限制:

      ①比如下面中Name属性就不能被序列化,因为我们设置了Set为私有的

1     public class Test2     {3         public string Name { get; private set; }4     }

       ②如果对象中有Dictionary变量的话也会造成无法序列化

        因为Dictionary不支持XML序列化,也是自己实现XML序列化,不过有一种变通的方式,我们可以把Dictionary中的Key和Value封装成一个对象,然后形成一个List集合,那么就可以使用XML序列化了,如:

1     public class Person 2     { 3         public string Name { get; set; } 4     } 5  6     public class PersonKeyValue 7     { 8         public string Key { get; set; } 9 10         public Person Value { get; set; }11     }12 13     public class Test14     {15         public void XMLSerialize()16         {17             Dictionary
dictionary = new Dictionary
();18 List
list = new List
();19 foreach (KeyValuePair
person in dictionary)20 {21 list.Add(new PersonKeyValue { Key = person.Key, Value = person.Value });22 }23 24 //最后再对list进行XML序列化就可以了25 }26 }

       通过一种变通的方式就可以实现Dictionary的XML序列化了!

 

最后我们使用了二进制序列化解决了问题,其实最好的还是使用XML进行序列化,可是由于我们项目中的对象太过复杂,而且类型太多导致了XML序列化困难重重,无奈只好选择了最搓的一种方法了!

 

 以同步至:

转载地址:http://ikszl.baihongyu.com/

你可能感兴趣的文章
android开发学习 ------- 枚举类型在Android中的用法
查看>>
day14 装饰器模拟验证附加功能
查看>>
c#简单自定义异常处理日志辅助类
查看>>
make: *** No targets specified and no makefile found. Stop.错误
查看>>
闭包的常见用处
查看>>
中联通4月份3G用户净增181.7万总数突破2000万
查看>>
cJSON填坑记
查看>>
css3(border-radius)边框圆角详解(转)
查看>>
hdu1406
查看>>
Android 开发工具下载中文网站
查看>>
Redis 列表处理
查看>>
The vim syntax of systemd unit file
查看>>
关于Linux库文件的制作--普通的静态库、动态库
查看>>
yum install tomcat
查看>>
android 股票数据通过日K获取周K的数据 算法 源码
查看>>
关于Linux运维的一些题目总结
查看>>
原生js实现查询天气的小应用
查看>>
分享两个必应壁纸接口,可用来获取高质量壁纸和故事
查看>>
tomcat启动脚本
查看>>
ASP.NET-FineUI开发实践-10
查看>>