C#序列化和反序列化(json)
一,什么是Json?
json是存储和交换文本信息的方法,类似xml。但是json比xml更小,更快,j更易于解析。并且json采用完全独立于语言的文本格式(即不依赖于各种编程语言),这些特性使json成为理想的数据交换语言。
json使用JavaScript语法来描述数据对象,但是json独立于语言和平台。json解析器和json库支持许多不同的编程语言。
json语法规则:
- 数据在键值对中
- 数据由逗号分割
- 花括号保存对象
- 方括号保存数组
json数据结构:
json简单来说就是javascript中的对象和数组,通过这两种数据结构就可以表示各种复杂的结构。
- 对象:对象在json中表示为大括号“{}”括起来的内容,数据结构为{key:value,key:value,...}的键值对的结构。在面向对象中,key为对象的属性,vlaue为对应属性的值。取值方法为对象.key(c#对象[key])获取属性值,这个属性值可以为数字,字符串,数组,对象几种。
- 数组:数组在json中表示为中括号“[]”括起来的内容,数据结构为["java","javascript","vb",...],取值方式和所以语言一样,使用索引获取,字段的值可以是数字,字符串,数组,对象几种。
安装JsonNet程序包:
右键单击项目->选择管理NuGet程序包->输入json->选择Newtonsoft.Json进行下载。
下载完成后就会出现:
二, json的序列化和反序列化
我们可以添加一个文本文件新建项目,在这里就可以安装json的语法进行书写。
并创建一个skill类用于接收该值。(类中的属性要与josn键值对应)
class skill { public int ID { get; set; } public string Name { get; set; } public int damage { get; set; } }
1️⃣反序列化(即将json语法转化成C#中的对象)
在主程序中进行调用:(引用添加的txt路径需要将skill.txt的复制到输出目录属性设置为如果较新则复制)
static void Main(string[] args) { //反序列化DeserializeObject skill[] skillArray= JsonConvert.DeserializeObject<skill[]>(File.ReadAllText("skill.txt")); foreach (skill s in skillArray) { Console.WriteLine("id:" + s.ID + "名字:" + s.Name + "伤害值:" + s.damage); } }
这样就完成了反序列化操作:
2️⃣序列化操作(将C#中类的数据转换成json格式)
- 序列化对象(josn格式:使用大括号)
static void Main(string[] args) { //SerializeObject skill sk = new skill(); sk.ID = 10; sk.Name = "金刚罩"; sk.damage = 1000; string str = JsonConvert.SerializeObject(sk); Console.WriteLine(str); }
获得的字符串str可以用来传输或存储。
- 序列化数组(json格式:使用中括号)
static void Main(string[] args) { string[] ss = { "小李", "小王", "小红" }; string str = JsonConvert.SerializeObject(ss); Console.WriteLine(str); }