[我眼中的C#]XML和JSON

来源:互联网 发布:配电网工程设计软件 编辑:程序博客网 时间:2024/05/02 00:50

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();        }
0 0
原创粉丝点击