C#序列化操作
序列化简介
序列化过程:序列化-》字节数组-》通信
反序列化过程:通信接收-》字节数组转换-》反序列化为原始对象
参考:https://www.cnblogs.com/gaoshang212/archive/2014/10/24/4048720.html
Protobuf简介
Google Protocol Buffer(简称 Protobuf)是一种轻便高效的结构化数据存储格式,平台无关、语言无关、可扩展,可用于通讯协议和数据存储等领域。
google protobuf官方网站: https://developers.google.com/protocol-buffers/
Protobuf使用
安装
visual studio中使用安装通过NuGet包管理安装protobuf-net即可(Marc Gravell),该项目github地址:https://github.com/mgravell/protobuf-net
对象序列化
protobuf对象序列化需对对象添加序列化标签,否则会报错(详见使用问题)
可序列化的对象如下添加标签:
1 [ProtoContract] 2 [Serializable] 3 public class Person 4 { 5 /// <summary> 6 /// 编号 7 /// </summary> 8 [ProtoMember(1)] 9 public int Id { get; set; } 10 11 /// <summary> 12 /// 姓名 13 /// </summary> 14 [ProtoMember(2)] 15 public string Name { get; set; } 16 17 /// <summary> 18 /// 性别 19 /// </summary> 20 [ProtoMember(3)] 21 public Sex Sex { get; set; } 22 23 /// <summary> 24 /// 地址 25 /// </summary> 26 [ProtoMember(4)] 27 public Address Address { get; set; } 28 } 29 30 [ProtoContract] 31 [Serializable] 32 public class Address 33 { 34 [ProtoMember(1)] 35 public string Line1 { get; set; } 36 37 [ProtoMember(2)] 38 public string Line2 { get; set; } 39 } 40 41 /// <summary> 42 /// 性别 43 /// </summary> 44 public enum Sex 45 { 46 男, 47 女 48 }
序列化调用
1 MemoryStream ms=new MemoryStream(); 2 ProtoBuf.Serializer.Serialize(ms,personList);//personList为待序列化对象
序列化与反序列化
通过字节数组序列化与反序列化。
注意无法将原始msBuild反序列化(得到对象所有元素为初始值)。
1 MemoryStream msBuild = new MemoryStream(); 2 ProtoBuf.Serializer.Serialize(msBuild, p);//序列化 3 //ms.Position = 0; 4 byte[] msg = msBuild.ToArray();//转为字节数组 5 6 //****deserialize from bytes***** 7 MemoryStream msRead = new MemoryStream(msg);//字节数组转为流 8 Person pReceived = null; 9 pReceived = ProtoBuf.Serializer.Deserialize<Person>(msRead);//流反序列化为原始对象
通过保存为文件的方式序列化与反序列化
1 using (var file = File.Create("person.bin")) 2 { 3 Serializer.Serialize(file, p); 4 } 5 6 Person newPerson; 7 using (var file = File.OpenRead("person.bin")) 8 { 9 newPerson = Serializer.Deserialize<Person>(file); 10 }
使用问题
1.保证序列化对象具有标签,否则报错:未预期的对象。

2.Unicode序列化与反序列化会报错:尝试读取超出流末尾内容。
JSON序列化
json介绍
官网:https://www.json.org/json-zh.html
JSON数据格式简介:https://www.cnblogs.com/SkySoot/archive/2012/04/17/2453010.html
安装及初始化
使用Newtonsoft.Json进行序列化
序列化
代码如下:json序列化将对象序列化为json格式字符串,字符串再转为字节数组。
1 string strBuild = JsonConvert.SerializeObject(p); 2 byte[] bytesBuild = Encoding.UTF8.GetBytes(strBuild);
json将对象序列化为json格式字符串如下:

json将之表示为:
{"Id":23,"Name":"国G_05","Sex":1,"Address":{"Line1":"L1","Line2":"L2"},"Time":"2018-04-09T15:58:36.665541+08:00"}
注意其中时间的格式
反序列化
1 string strBuild = JsonConvert.SerializeObject(p); 2 byte[] bytesBuild = Encoding.UTF8.GetBytes(strBuild); 3 4 //*****deserialize from bytes****** 5 string strGet = Encoding.UTF8.GetString(bytesBuild); 6 Person pGet = JsonConvert.DeserializeObject<Person>(strGet);
Xml序列化

浙公网安备 33010602011771号