输出结果如下:
文章插图
- JavaScriptSerializer
using System.Web.Script.Serialization;
下面我们就利用 JavaScriptSerializer 对象进行序列化和反序列化,代码如下:class Program{static void Main(string[] args){#region 序列化Student student = new Student{Name = "Tom",Age = 20,Sex = 1,Address = new Address{City = "NYC",Road = "ABC"}};//初始化JavaScriptSerializer serializer = new JavaScriptSerializer;string jsonStr = serializer.Serialize(student);Console.WriteLine(jsonStr);#endregion#region 反序列化student = serializer.Deserialize<Student>(jsonStr);Console.WriteLine("Name: " +student.Name);Console.WriteLine("Sex: " + student.Sex);Console.WriteLine("Age: " + student.Age);Console.WriteLine("Address: " + student.Address.City+" "+student.Address.Road);#endregionConsole.ReadLine;}}
从上面的代码我们可以看出利用 JavaScriptSerializer 序列化和反序列化要比 DataContractJsonSerializer 类方便 。上述代码运行结果如下:文章插图
- Newtonsoft.Json
using Newtonsoft.Json;
下面我们来看看 Newtonsoft.Json 的具体使用:class Program{static void Main(string[] args){#region 序列化Student student = new Student{Name = "Tom",Age = 20,Sex = 1,Address = new Address{City = "NYC",Road = "ABC"}};string jsonStr = JsonConvert.SerializeObject(student);Console.WriteLine(jsonStr);#endregion#region 反序列化student = JsonConvert.DeserializeObject<Student>(jsonStr);Console.WriteLine("Name: " +student.Name);Console.WriteLine("Sex: " + student.Sex);Console.WriteLine("Age: " + student.Age);Console.WriteLine("Address: " + student.Address.City+" "+student.Address.Road);#endregionConsole.ReadLine;}}
上述代码输出结果如下:文章插图
从代码中我们看到 Newtonsoft.Json 序列化和反序列化更加简单,简单到只需要一行代码就完成了序列化和反序列化 。
2. XML
在 JSON 还没出现之前,XML 是互联网上常用的数据交换格式和规范 。.NET 中提供 XmlSerializer 类将对象序列化为 XML 和将 XML 反序列化为对象,使用方法是首先实例化,然后调用序列化/反序列化方法 。下面我们依然使用最开始定义的那个类,来看看 XmlSerializer 的使用 。使用前我们需要引入 using System.Xml.Serialization 命名空间 。
using System.Xml.Serialization;
具体序列化/反序列化方法如下:class Program{static void Main(string[] args){#region 序列化Student student = new Student{Name = "Tom",Age = 20,Sex = 1,Address = new Address{City = "NYC",Road = "ABC"}};XmlSerializer xmlSerializer = new XmlSerializer(typeof(Student));using (FileStream stream = new FileStream(@"d:123.xml", FileMode.OpenOrCreate)){xmlSerializer.Serialize(stream, student);}#endregion#region 反序列化using (FileStream stream = new FileStream(@"d:123.xml", FileMode.OpenOrCreate)){XmlReader xmlReader = new XmlTextReader(stream);student = xmlSerializer.Deserialize(xmlReader) as Student;}Console.WriteLine("Name: " + student.Name);Console.WriteLine("Sex: " + student.Sex);Console.WriteLine("Age: " + student.Age);Console.WriteLine("Address: " + student.Address.City + " " + student.Address.Road);#endregionConsole.ReadLine;}}
这里有一点需要注意,如果对象类的访问修饰符不是 public 将会报错 。上述代码运行结果如下:文章插图
文章插图
3. 二进制
序列化为二进制,在实际开发中真的很少用到,但是我觉得还是有必要讲一讲,它的使用方法和 XmlSerializer 序列化/反序列化类似,首先实例化,然后调用序列化/反序列化方法 。在进行序列化/反序列化前首先引入命名空间 System.Runtime.Serialization.Formatters.Binary,同时修改对象类如下:
推荐阅读
- Android开发者,是时候了解LeakCanary了
- 木瓜可以降血糖吗?
- 安溪铁观音茶叶中的汤水应当如何审评
- 公司注销后,员工发现自身权益受到侵害的,应当向谁主张权利?
- 员工请假偷偷去面试,管理者应当如何处理?
- php开发编辑器有哪些?
- 国内仓收到快递出现包装破损的处理办法是? 快递企业在收寄快件时,应当
- 春季是减肥瘦身好时机 熟知减肥技巧轻松瘦
- Android 开发者必会的内存泄漏指南
- 销售散装食品无标签如何处罚 食品经营者销售散装食品应当在标签上标明