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();
}