C#序列化和反序列化(json)
一,什么是Json?
json是存储和交换文本信息的方法,类似xml。但是json比xml更小,更快,j更易于解析。并且json采用完全独立于语言的文本格式(即不依赖于各种编程语言),这些特性使json成为理想的数据交换语言。
json使用JavaScript语法来描述数据对象,但是json独立于语言和平台。json解析器和json库支持许多不同的编程语言。
json语法规则:
- 数据在键值对中
- 数据由逗号分割
- 花括号保存对象
- 方括号保存数组
json简单来说就是javascript中的对象和数组,通过这两种数据结构就可以表示各种复杂的结构。
- 对象:对象在json中表示为大括号“{}”括起来的内容,数据结构为{key:value,key:value,...}的键值对的结构。在面向对象中,key为对象的属性,vlaue为对应属性的值。取值方法为对象.key(c#对象[key])获取属性值,这个属性值可以为数字,字符串,数组,对象几种。
- 数组:数组在json中表示为中括号“[]”括起来的内容,数据结构为["java","javascript","vb",...],取值方式和所以语言一样,使用索引获取,字段的值可以是数字,字符串,数组,对象几种。
右键单击项目->选择管理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(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); }
【C#序列化和反序列化(json)】
文章图片
推荐阅读
- nginx平滑重启和平滑升级的图文教程
- go new() 和 make() 的区别
- 关于条件渲染和列表渲染
- CPU是海王(聊聊|CPU是海王?聊聊 主/子线程 和 同/异步 的关系)
- C++中vector::data()使用心得和对自定义类型指针运算符的默认重载
- Nginx反向代理与负载均衡概念理解及模块使用
- 2119、反转两次的数字|2119、反转两次的数字 | 算法(leetode,附思维导图 + 全部解法)300题
- [C++]C风格、C++风格和C++11特性的线程池
- C#中Thread(线程)和Task(任务)实例详解
- Python|Python requests用法和django后台处理详解