本文共 2563 字,大约阅读时间需要 8 分钟。
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。以键值对形式存在。
(1) 创建实体
(2)将实体对象序列化为Json格式1、新建一个Person类
using System.Runtime.Serialization; //添加命名空间,序列化 如果添加不上,需要添加引用[DataContract]//必须申明,否则无法序列化public class Person{ [DataMember(Name = "userCode")]//必须申明,否则无法序列化 private string _username; [DataMember(Name = "password")]//必须申明,否则无法序列化 private string _pwd; public Person(string name, string pwd) { this._username = name; this._pwd = pwd; } //重写toString方法 public override string ToString() { return "姓名:" + this._username + "\t密码:" + this._pwd; }}
2、在主函数中写
using System;using System.Runtime.Serialization.Json;//序列化对象需要引入的using System.IO; //序列化对象需要引入的,从内存中转换using System.Text;class Program{ static void Main(string[] args) { Person p= new Person("鸣人", "123"); //序列化对象 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person)); MemoryStream ms = new MemoryStream(); ser.WriteObject(ms, p); //将对象转换成json存储,写入内存中 string jsonStr = Encoding.UTF8.GetString(ms.ToArray()); //再从内存中读取 ms.Dispose(); //关闭内存流 Console.WriteLine(jsonStr); Console.ReadKey(); }}
得到的结果:
PS:我们写的userCode在前,password在后,可以序列化之后,显示顺序正好相反,造成这个原因是因为序列化时是按照字母排序的(想要验证的同学,可以在Person类中的注解式配置中将“[DataMember(Name = “userCode”)]”,改为“[DataMember(Name = “auserCode”)]”),这个无关紧要,对程序编写没有任何影响。因为Json仅仅是用作来传输数据的,不论是服务端的接收还是客户端的显示,都需要对json做进一步的处理,再其次也因为json存的是键值对,只要键和值对应即可,和顺序没有关系。
(1)将接收的json装换成字节数据
(2)再转换成实体对象1、同样需要一个实体Person类,代码省略,参考上面的Person类
…
2、在主函数中写
using System;using System.Runtime.Serialization.Json;//序列化对象需要引入的using System.IO; //序列化对象需要引入的,从内存中转换using System.Text;class Program{ static void Main(string[] args) { //反序列化对象 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person)); string jsonStr = "{\"userCode\": \"雏田\",\"password\": \"521\" }"; byte[] byteData = UTF8Encoding.UTF8.GetBytes(jsonStr); MemoryStream ms = new MemoryStream(byteData); Person p = (Person)ser.ReadObject(ms); Console.WriteLine(p.ToString()); ms.Dispose(); //关闭内存流 Console.WriteLine("OK!"); Console.Read(); }}
得到的结果:
至此已经完成了对json序列化和反序列化的过程,现在不论是对json的提交,还是对json的接收,我们都可以做处理了。虽然还不太清楚序列化的具体作用,不仅仅json可以序列化,其它好多需要传输的数据也都可以序列化,以后遇到在继续学习吧。
转载地址:http://unqmi.baihongyu.com/