JSON是储存和交换文本信息的语法,类似于XML。但JSON比XML更小、更快、更易解析。
JSON中的键对应C#就是字段或者属性,而值就是值了,JSON通过对象和数组这两种结构可以表示各种复杂的结构
第一步、引入JSON库
因为解析JSON的方法有很多种,他们并没有统一标准,所有这里使用一个比较常用的 LitJson
引入JSON有两种方法:
第二步、先编写一个JSON的.txt文本。
这是一个主角信息JSON,跟是一个对象,里面有姓名、等级、年龄、技能列表(这里技能列表里面就嵌套了一个数组)
{
"Name":"琦玉老师",
"Level":999,
"Age":25,
"SkillList": [
{"id":2,"name":"认真一拳","damage":9999},
{"id":3,"name":"连续普通拳","damage":4444},
{"id":4,"name":"连续认真拳","damage":9999999}
]
}
完成后将JSON文本复制到vs项目根目录,把文件属性改成 如果较新则复制
第三步、创建类
//JsomMapper是LitJson中解析JSON文本的方法
//返回值是jsondata,参数是json文本(jsondata代表一个数组或者一个对象,要看json文本是一个数组还是一个对象)
JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("主角信息.txt"));
这里我们可以直接遍历jsonData,通过字符串索引器取得键值对的值,但是这种方法及麻烦又有局限,例如我们这个JSON中嵌套了一个数组,用这个方法就比较麻烦。所以这里不用上面的代码。
这里推荐使用一个既便利又通用的方法
首先我们创建一个主角类,然后定义4个属性或者字段,分别对应JSON中的Name、Level 、Age 、SkillList 注意JSON中的键和属性名必须一致,然后我们发现JSON中SkillList对象包含的是一个数组,所以我们需要再创建一个类来保存这个数组。这样就可以了。注意重写一下ToString方法,这样方便稍后打印
class Player
{
//字段或属性名要跟json里面的键一致
public string Name { get; set; }
public int Level { get; set; }
public int Age { get; set; }
//如果json里面的数据发生数组对象的嵌套,可能就会需要添加多个类
public List SkillList { get; set; }
public override string ToString()
{
return string.Format("Name:{0},Level:{1},Age:{2},SkillList:{3}", Name, Level, Age, SkillList);
}
}
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);
}
}
定义好类之后使用JsomMapper方法,这里我们加上了泛型,所以返回值的类型就变成了泛型的类型,这样直接打印就可以了
(数组不能直接打印,我们可以用player点到他再遍历)
Player player=JsonMapper.ToObject(File.ReadAllText("主角信息.txt"));
Console.WriteLine(player);
foreach (var item in player.SkillList)
{
Console.WriteLine(item.ToString());
}
Console.WriteLine();
第一步和上面一样
Player ss = new Player();//定义数据对象
ss.Name = "杰诺斯";
ss.Level = 89;
ss.Age = 20;
//转换 利用JsonMapper里面的ToJson方法把数据对象转换成json
string json =JsonMapper.ToJson(ss);
Console.WriteLine(json);
首先把储存数据Excel表复制到vs根目录,把文件属性改成 如果较新则复制
引入两个命名空间
using System.Data.OleDb;
using System.Data;
static void Main(string[] args)
{
//xls格式的Excel表格数据获取 注意如果是xlsx格式需要修改Provider 和Excel 值
string fileName = "装备信息";
// 使用什么组件解析 表示数据源(输入数据库的地址)
string connectionString = "Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source =" + fileName + ";" + ";Extended Properties =\"Excel 8.0; HDR = YES; IMEX = 1\"";
//第一步:创建连接到数据源的对象
OleDbConnection connection = new OleDbConnection(connectionString);
//第二步:打开连接
connection.Open();
//第三步、查询 从表1查询
string sql = "select*from[Sheet1$]";//这是一个查询命令
// 查询命令 连接对象
OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connection);//查询结果是一个表格(是DataTable对象表示)
DataSet dataSet = new DataSet();//用来存放数据 用来存放DataTable对象
adapter.Fill(dataSet);//表示把查询的结果(DataTable对象)放到(填充)dataSet里面,如果有多个表格就多次调用此方法
connection.Close();//关闭连接 释放连接资源
//第四步、取得数据
DataTableCollection tableCollection = dataSet.Tables;//获取当前集合中所有的表格
DataTable table = tableCollection[0];//因为我们只往dataset里面放置了一张表格,所以这里取得的索引为0的表格就是我们刚刚查询到的表格
//取得表格中的数据 就是取得table中所有的行
DataRowCollection rowCollection = table.Rows;//返回了一个行的集合
//遍历行的集合 取得每一行的datarow数据(默认不取第一行,把第一行视为表头)
foreach (DataRow row in rowCollection)
{
//取得row中前8列的数据 索引0-7
for (int i = 0; i < 8; i++)
{
Console.Write(row[i] + " ");
}
Console.WriteLine();
}
Console.ReadKey();
}
这里我们取得了数据,也可定义一个类来保存这些数据
打印结果
最后推荐一个网站 http://www.bejson.com/
这是可以校验JSON、JSON在线编辑、Excel转JSON、的网站,因为VS编写JSON是没有错误提示的所以有时候写错了很难返现,可以用这个网站的工具校验或者在线编辑都很方便。还有其他很多相关功能 例如Excel转JSON,可以自己去看看
分享让知识变得有意义!后续会继续更新一些学习中问题。
OJMars
InTheMars