Json概念
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可以序列化,其它好多需要传输的数据也都可以序列化,以后遇到在继续学习吧。