[我眼中的C#]XML和JSON

本文介绍了JSON和XML这两种常用的数据交换格式,并通过具体案例展示了如何利用C#进行数据的解析与操作。针对不同格式的数据文件,文章详细解释了如何构建相应的类结构,以及如何使用LitJSON库和XML解析来读取和解析数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSON
JSON式存储和交换文本信息的语法,它是一种轻量级文本数据交换格式,JSON独立于语言,他具有自我描述性,所以相对于XML更容易理解。
学习JSON之前需要导入JSON 解析库,我们这里需要的是LitJSON.DLL,有两种方式导入
1,直接去JSON官网从C#模块下载,
2,通过VS项目引用里的的NuGET直接联机下载。
之后通过JSON创建两个json文档
{}代表一个对象,而[]代表数组
json主角信息.txt:
{
“Name”:”siki”,
“Level”:99,
“Age”:18,
“skilllist”:[
{“id”: 2,”name”: “天下无双”,”demage”: 123},
{“id”: 3,”name”: “独孤九剑”,”demage”: 56},
{“id”: 4,”name”: “死亡之翼”,”demage”: 8003}
]
}
json技能信息.txt:
[
{“id”: 2,”name”: “天下无双”,”demage”: 123},
{“id”: 3,”name”: “独孤九剑”,”demage”: 56},
{“id”: 4,”name”: “死亡之翼”,”demage”: 8003}
]
在建立两个相关的类用来对应文档中的信息(注意对象名字一定要一样,不然搜索为空)
Player.cs:

 class Player
    {
        public string Name { get; set; }
        public int Level { get; set; }
        public int Age { get; set; }
        public List<Skill> skilllist { get; set; }

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

Skill.cs:

 class Skill
    {
        public int id { get; set; }
        public int demage { get; set; }
        public string name { get; set; }

        public override string ToString()
        {
            return string.Format("id: {0}, demage: {1}, name: {2}", id, demage, name);
        }
    }

接着解析通过LitJson解析文档:

 JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json技能信息.txt"));
            foreach (JsonData temp in jsonData)
            {
                JsonData idValue = temp["id"]; //通过欧字符串索引器获取键值对的值
                JsonData nameValueData = temp["name"];
                JsonData damageValue = temp["demage"];
                int id = int.Parse(idValue.ToString());
                int demage = int.Parse(damageValue.ToString());
                Console.WriteLine(id + " " + demage + " " + nameValueData);
            }

            Skill[] skillArray = JsonMapper.ToObject<Skill[]>(File.ReadAllText("json技能信息.txt"));//使用泛型解析Json
            foreach (var skill in skillArray)
            {
                Console.WriteLine(skill);
            }

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

            Player player = JsonMapper.ToObject<Player>(File.ReadAllText("json主角信息.txt"));
            foreach (Skill skill in player.skilllist)
            {
                Console.WriteLine(skill);
            }
            Console.WriteLine(player);
            Player p = new Player();
            p.Name = "sdf";
            p.Level = 16;
            p.Age = 18;
            string json = JsonMapper.ToJson(p);
            Console.WriteLine(json);
            Console.ReadKey();

XML
XML文档解析过程与JSON类似,只不过后者采用了另一种语言以及解析方式
FileText1.txt:

<SkillInfo>
    <SkillList>
        <Skill
            SkillID="20002"  
            SkillEngName="Smash" 
            TriggerType="1" 
            ImageFile="data/gfx/image/gui_icon_skill_000.dds" 
            AvailableRace="7" 
        >
            <Name>重击</Name>
        </Skill>
        <Skill
            SkillID="20003" 
            SkillEngName="Hide"
            TriggerType="2" 
            ImageFile="data/gfx/image/gui_icon_skill_001.dds"
            AvailableRace="1" 
        >
            <Name>隐身</Name>
        </Skill>
        <Skill
            SkillID="20004" 
            SkillEngName="Ikari" 
            TriggerType="3" 
            ImageFile="data/gfx/image/gui_icon_skill_002.dds" 
            AvailableRace="1" 
        >
            <Name>怒之翼</Name>
        </Skill>
        <Skill
            SkillID="20005" 
            SkillEngName="Revenge" 
            TriggerType="5" 
            ImageFile="data/gfx/image/gui_icon_skill_003.dds" 
            AvailableRace="2" 
        >
            <Name>光之复仇</Name>
        </Skill>
    </SkillList>
</SkillInfo>

Skill.txt:

  class Skill
    {
        public int Id { get; set; }
        public string EngName { get; set; }
        public int TriggerType { get; set; }
        public string ImageFile { get; set; }
        public string Name { get; set; }
        public int AvaliableRace { get; set; }

        public override string ToString()
        {
            return string.Format("Id: {0}, EngName: {1}, TriggerType: {2}, ImageFile: {3}, Name: {4}, AvaliableRace: {5}", Id, EngName, TriggerType, ImageFile, Name, AvaliableRace);
        }
    }
 static void Main(string[] args)
        {
            List<Skill> skillLsit = new List<Skill>();
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("TextFile1.txt");
            XmlNode skillInfoNode= xmlDoc.FirstChild;
            XmlNode skillListNode = skillInfoNode.FirstChild;
            XmlNodeList skillNode = skillListNode.ChildNodes;
            foreach (XmlNode mySkillNode in skillNode)
            {
                Skill skill = new Skill();
                XmlElement ele = mySkillNode["Name"];
                skill.Name = ele.InnerText;
                skill.Id = int.Parse(mySkillNode.Attributes["SkillID"].Value);
                skill.EngName = mySkillNode.Attributes["SkillEngName"].Value;
                skill.TriggerType = int.Parse(mySkillNode.Attributes["TriggerType"].Value);
                skill.AvaliableRace = int.Parse(mySkillNode.Attributes["AvailableRace"].Value);
                skill.ImageFile = mySkillNode.Attributes["ImageFile"].Value;
                skillLsit.Add(skill);
            }
            foreach (var skill in skillLsit)
            {
                Console.WriteLine(skill);
            }
            Console.ReadKey();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值