序列化就是是将对象转换为容易传输的格式的过程, 一般情况下转化打流文件, 放入内存或者 IO 文件 中. 例如, 可以序列化一个对象, 然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象, 或者和其它应用程序共享使用. 反之, 反序列化根据流重新构造对象.
一, 序列化的方式
1)二进制序列化: 是一种将数据写到输出流, 以使它能够用来自动重构成相应对象的机制. 二进制, 其名字就暗示它的必要信息是保存在存储介质上, 而这些必要信息要求创建一个对象的精确的二进制副本. 在二进制 (流) 序列化中, 整个对象的状态都被保存起来, 而 xml 序列化只有部分数据被保存起来.
- string strobj = "serialization";
- FileStream stream = new FileStream("C:\\Users\\Jing\\Desktop\\11.txt", FileMode.Create, FileAccess.Write,FileShare.None);
- BinaryFormatter formatter = new BinaryFormatter();
- formatter.Serialize(stream, strobj);
- stream.Close();
- FileStream readstream = new FileStream("C:\\Users\\Jing\\Desktop\\11.txt", FileMode.Open, FileAccess.Read,
- FileShare.Read);
- string readdata = (string)formatter.Deserialize(readstream);
- readstream.Close();
- Console.WriteLine(readdata);
- Console.ReadLine();
2)SOAP 协议是一个在异构的应用程序之间进行信息交互的理想的选择. 我们需要在应用程序中添加 System.Runtime.Serialization.Formatters.SOAP 名字空间以便在. Net 中使用 SOAP 序列化. SOAP 序列化的主要优势在于可移植性. SoapFormatter 把对象序列化成 SOAP 消息或解析 SOAP 消息并重构被序列化的对象.
- string strobj = "serialization";
- FileStream stream = new FileStream("C:\\Users\\Jing\\Desktop\\11.txt", FileMode.Create, FileAccess.Write ,FileShare.None);
- SoapFormatter formatter = new SoapFormatter();
- formatter.Serialize(stream, strobj);
- stream.Close();
- FileStream readstream = new FileStream("C:\\Users\\JingWang\\Desktop\\11.txt", FileMode.Open , FileAccess.Read ,
- FileShare.Read );
- string readdata = (string)formatter.Deserialize(readstream);
- readstream.Close();
- Console.WriteLine(readdata);
- Console.ReadLine();
3)xml 序列化: 将一个对象或参数的公开字段和属性以及方法的返回值转换 (序列化) 成遵循 XSD 文档标准的 xml 流. 因为 xml 是一个开放的标准, xml 能被任何需要的程序处理, 而不管在什么平台下, 因此 xml 序列化被用到带有公开的属性和字段的强类型类中, 它的这些发生和字段被转换成序列化的格式 (在这里是 xml) 存储或传输." 添加 System.xml.Serialization 引用以使用 xml 序列化. 使用 xml 序列化的基础是 XmlSerializer.
- string strobj = "test string for serialization";
- FileStream stream = new FileStream("C:\\Users\\Jing\\Desktop\\11.txt", FileMode.Create, FileAccess.Write ,FileShare.None);
- XmlSerializer xmlserializer = new XmlSerializer(typeof(string));
- xmlserializer.Serialize(stream, strobj);
- stream.Close();
- FileStream readstream = new FileStream("C:\\Users\\Jing\\Desktop\\11.txt", FileMode.Open , FileAccess.Read ,FileShare.Read );
- string readdata = (string)xmlserializer.Deserialize(readstream);
- Console.WriteLine(readdata);
- Console.ReadLine();
4)JSON 序列化:
- string strobj = "test string for serialization";
- FileStream stream = new FileStream("C:\\Users\\Jing\\Desktop\\11.txt", FileMode.Create, FileAccess.Write,FileShare.None);
- DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(string));
- formatter.WriteObject(stream, strobj);
- stream.Close();
- FileStream readstream = new FileStream("C:\\Users\\Jing\\Desktop\\11.txt", FileMode.Open, FileAccess.Read,FileShare.Read);
- string readdata = (string)formatter.ReadObject(readstream);
- readstream.Close();
- Console.WriteLine(readdata);
- Console.ReadLine();
在 C# 中, 如果想要进行自定义类的序列化, 只需要简单地在定义类的时候添加 Serializable 标签即可. 除非类的成员标记了[NonSerializable], 序列化会将类中的所有成员都序列化.
- [Serializable]
- public class Person
- {
- public string name;
- public int age;
- }
二,.NET 对象和 JSON 对象之间的转化 - JSON.NET
使用 JSONSerializer 可以非常方便的实现. NET 对象与 JSON 数据之间的转化, JSONSerializer 会把. NET 对象的属性名转化为 JSON 数据中的 Key, 把对象的属性值转化为 JSON 数据中的 value.
示例:
- Product product = new Product();
- product.Name = "Apple";
- product.Price = 3.99M;
- var deserialize= JsonConvert.DeserializeObject<Product>(urlToJson);
- var serialize= JsonConvert.SerializeObject(Product);
来源: http://www.bubuko.com/infodetail-2848715.html