C#序列化和反序列化(json)

一,什么是Json?

json是存储和交换文本信息的方法,类似xml。但是json比xml更小,更快,j更易于解析。并且json采用完全独立于语言的文本格式(即不依赖于各种编程语言),这些特性使json成为理想的数据交换语言。

json使用JavaScript语法来描述数据对象,但是json独立于语言和平台。json解析器和json库支持许多不同的编程语言。

json语法规则:

  • 数据在键值对中
  • 数据由逗号分割
  • 花括号保存对象
  • 方括号保存数组

json数据结构:

json简单来说就是javascript中的对象和数组,通过这两种数据结构就可以表示各种复杂的结构。

  1. 对象:对象在json中表示为大括号“{}”括起来的内容,数据结构为{key:value,key:value,...}的键值对的结构。在面向对象中,key为对象的属性,vlaue为对应属性的值。取值方法为对象.key(c#对象[key])获取属性值,这个属性值可以为数字,字符串,数组,对象几种。
  2. 数组:数组在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);
        }

posted @ 2022-03-19 18:32  唯有自己强大  阅读(5247)  评论(0编辑  收藏  举报