c# 使用LitJson解析Json

如何添加litJson

        两种引入litjson的方法
        1,去litjson的网站下载litjson.dll 然后添加引用 找到dll所在目录
        2,右键引用 打开管理netget程序包,在联机里面搜索litjson  在搜索结果中选择一个 点击安装

使用LitJson解析json文本

首先定义我们的json文本

[
{"id":2,"name":"天下无双","damage":123 },
{"id":3,"name":"天下无贼","damage":21 },
{"id":4,"name":"咫尺天涯","damage":900 }
]

直接解析文本内容

            //我们使用jsonMapper去解析json文本
            //jsondata代表一个数组或者一个对象
            //在这里jsonData代表数组 
            JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json技能信息.txt"));
            foreach (JsonData temp in jsonData)//在这里temp代表一个对象
            {
                JsonData idValue = temp["id"]; //通过字符串索引器可以取得键值对的值
                JsonData nameValue = temp["name"];
                JsonData damageValue = temp["damage"];
                int id = Int32.Parse(idValue.ToString());
                int damage = Int32.Parse(damageValue.ToString());
                Console.WriteLine(id+":"+nameValue.ToString()+":"+damage);
                }

然后输出就可以看到对应的信息了

但是既然jsonData可以带表对象,我们可以使用对象进行接收,当然平常我们的需求也是这样的

解析成技能对象
创建我们的技能对象

    class Skill
    {
        public int id;
        public int damage;
        public string name;

        public Skill(int id, int damage, string name)
        {
            this.id = id;
            this.damage = damage;
            this.name = name;
        }
        public override string ToString()
        {
            return string.Format("Id: {0}, Damage: {1}, Name: {2}", id, damage, name);
        }
    }

更改一下我们上面的解析文本的方法

            List<Skill> skillList = new List<Skill>();
            我们使用jsonMapper去解析json文本
            jsondata代表一个数组或者一个对象
            在这里jsonData代表数组
            JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json技能信息.txt"));
            foreach (JsonData temp in jsonData)//在这里temp代表一个对象
            {
                Skill skill = new Skill();
                JsonData idValue = temp["id"]; //通过字符串索引器可以取得键值对的值
                JsonData nameValue = temp["name"];
                JsonData damageValue = temp["damage"];
                int id = Int32.Parse(idValue.ToString());
                int damage = Int32.Parse(damageValue.ToString());
                //Console.WriteLine(id+":"+nameValue.ToString()+":"+damage);
                skill.id = id;
                skill.damage = damage;
                skill.name = nameValue.ToString();
                skillList.Add(skill);
            }
            foreach (var temp in skillList)
            {
                Console.WriteLine(temp);
            }

可以看到两个输出是一样的

使用泛型进行解析

将JsonMapper.ToObject的类型定义为skill对象的数组,直接对比里面的字段进行添加

            //使用泛型去解析json
            //json里面对象的键必须跟定义的类里面的字段或者属性保持一致
            Skill[] skillArray = JsonMapper.ToObject<Skill[]>(File.ReadAllText("json技能信息.txt"));
            foreach (var temp in skillArray)
            {
                Console.WriteLine(temp);
            }

这样我们不仅可以通过数组还可以通过list进行解析,这两个结果是一样的

            List<Skill> skillList = JsonMapper.ToObject<List<Skill>>(File.ReadAllText("json技能信息.txt"));
            foreach (var temp in skillList)
            {
                Console.WriteLine(temp);
            }

解析对象类型的Json

我们的对象类型的json,这里我们把上面的skill当成一个数组成为了这个对象的一个SkillList属性

{
    "Name":"siki",
    "Level":99,
    "Age":18,
    "SkillList":[
        {"id":2,"name":"天下无双","damage":123 },
        {"id":3,"name":"天下无贼","damage":21 },
        {"id":4,"name":"咫尺天涯","damage":900 }
    ]
}

然后根据json文件的属性构建我们的解析对象类

    class Player
    {
        //字段或者属性名 要跟json里面的对应
        public string Name { get; set; }
        public int Level { get; set; }
        public int Age { get; set; }
        public List<Skill> SkillList = new List<Skill>();

        public override string ToString()
        {
            return string.Format("Name: {0}, Level: {1}, Age: {2}, SkillList: {3}", Name, Level, Age, SkillList);
        }
    }

然后解析我们的json
这里我们直接使用泛型解析就可以了

            Player p = JsonMapper.ToObject<Player>(File.ReadAllText("主角信息.txt"));
            Console.WriteLine(p);
            foreach (var temp in p.SkillList)
            {
                Console.WriteLine(temp);
            }

把一个对象信息转化为json

            Player p = new Player();
            Skill a = new Skill(6, 50, "葵花宝典");
            p.Name = "旺财";
            p.Level = 100;
            p.Age = 16;
            p.SkillList.Add(a);
            string json = JsonMapper.ToJson(p);
            Console.WriteLine(json);

这样我们就可以将这个player对象转换为我们刚才看见的json格式了

猜你喜欢

转载自blog.csdn.net/qq_41056203/article/details/81004932