json语法规则
使用json来存放类的信息,比较方便,因为它可以使用泛型类自动转换文档获取信息,不同于XML
数据在键值对中
数据由逗号分隔
花括号保存对象
方括号保存数组
JSON 名称/值对
JSON 数据的书写格式是:名称/值对。
名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:"firstName":"John"
JSON 值可以是:数字(整数或浮点数),字符串(在双引号中),逻辑值(true 或 false),数组(在方括号中),对象(在花括号中),null
代码案例
两个json文档,一个存放技能Skill,一个存放主角信息。
json文档
Skill文档
主角信息文档
创建接受文档信息的模型,必须属性一致才能用泛型集合读取成功
模型类
class Skill
{
public int id;
public int damage;
public string name;
public override string ToString()
{
return string.Format("Id: {0}, Damage: {1}, Name: {2}", id, damage, name);
}
}
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}, SkillList: {3}", Name, Level, Age, SkillList);
}
}
常规解析
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);
}
泛型解析
//使用泛型去解析json
//json里面对象的键必须跟定义的类里面的字段或者属性保持一致
//直接解析成Skill对象数组
Skill[] skillArray = JsonMapper.ToObject<Skill[]>(File.ReadAllText("json技能信息.txt"));
foreach (var temp in skillArray)
{
Console.WriteLine(temp);
}
//解析成Skill对象列表
List<Skill> skillList1 = JsonMapper.ToObject<List<Skill>>(File.ReadAllText("json技能信息.txt"));
foreach (var temp in skillList1)
{
Console.WriteLine(temp);
}
//解析成主角对象
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();
p.Name = "花千骨";
p.Level = 100;
p.Age = 16;
string json =JsonMapper.ToJson(p);