JSON是存储和交换文本信息的语法,类似XML。比XML更小,更快,更易解析,和XML一样是一种数据格式。这里使用litjson简单读取一下文本信息。
方法1:使用JsonMapper.ToObject解析
创建一个txt用于存储文本信息
json技能信息.txt:
[
{"ID":1,"Name":"凤舞九天","Damage":230},
{"ID":2,"Name":"光之束缚","Damage":125},
{"ID":3,"Name":"最后一击","Damage":400}
]
程序中创建一个与json文本信息对应的Skill类:
class Skill
{
public int ID { get; set; }
public string Name { get; set; }
public int Damage { get; set; }
public override string ToString()
{
return $"{nameof(ID)}: {ID}, {nameof(Name)}: {Name}, {nameof(Damage)}: {Damage}";
}
}
Main中:
static void Main(string[] args)
{
List<Skill> skillList = new List<Skill>();
//使用litjson解析json文本
//两种引入Lisjson方式。1.官网下载dll程序集;2.右键引用,在管理netget程序包中下载
//这里的jsondata代表一个数组
JsonData jsondata = JsonMapper.ToObject(File.ReadAllText(@".\..\..\json技能信息.txt"));
foreach (JsonData data in jsondata)//这里data代表一个对象
{
Skill skill = new Skill();
JsonData IDValue = data["ID"];
JsonData NameValue = data["Name"];
JsonData DamageValue = data["Damage"];
skill.ID = Int32.Parse(IDValue.ToString());
skill.Name = NameValue.ToString();
skill.Damage = Int32.Parse(DamageValue.ToString());
skillList.Add(skill);
}
foreach (Skill skill in skillList)
{
Console.WriteLine(skill.ToString());
}
Console.ReadKey();
}
结果:
上面我们使用File.ReadAllText()方法传入需要的文本信息,再使用JsonMapper来对文本进行解析,最终解析好的数据存到“jsondata”里面,然后把“jsondata”里面的数据信息分别提取出来
方法2:使用泛型JsonMapper.ToObject<>解析
依然使用上面的json文件,主程序中稍微修改一下:
Skill[] skillArray = JsonMapper.ToObject<Skill[]>(File.ReadAllText(@".\..\..\json技能信息.txt"));
foreach (Skill temp in skillArray)
{
Console.WriteLine(temp);
}
结果同上。
使用这种方式需要将类的模型和json模型做好对应,使用该方式可以很简易的得到json中的数据。
方法3:
这次我们将json中的文本修改一下:
角色信息.txt
{
"Player":"花千骨",
"Level":100,
"SkillList":[
{"ID":1,"Name":"凤舞九天","Damage":230},
{"ID":2,"Name":"光之束缚","Damage":125},
{"ID":3,"Name":"最后一击","Damage":400}
]
}
由于json改变了,相应的我们也得重新写一个PlayerInfo类:
class PlayerInfo
{
public string Player { get; set; }
public int Level { get; set; }
public List<Skill> SkillList { get; set; }
}
Main中:
PlayerInfo playerinfo = JsonMapper.ToObject<PlayerInfo>(File.ReadAllText(@".\..\..\角色信息.txt"));
Console.WriteLine(playerinfo.Player);
Console.WriteLine(playerinfo.Level);
foreach (Skill temp in playerinfo.SkillList)
{
Console.WriteLine(temp.ToString());
}
Console.ReadKey();
结果为: