目录
一、前期准备
引入using:
using MySql.Data.MySqlClient;
using System;
using System.Configuration;
using System.Data;
二、Json概念
Json 特性
JSON 类似于XML
JSON 比XML 更小, 更快, 更易解析
Json 语法规则
数据在键值对中 用 : 分隔
数据由逗号分隔 ,
花括号保存对象 {}
方括号保存数组 [] -- 唯一
---- 类似dictionary字典用法
类型对应, 变量名相同
Json文件修改删除:
建议先将Json读取到类中,在类中进行增删改查,修改完后再重新写入文件中。小编未查询到可以直接对Json文件进行增删改查。
三、Json 读取
前期准备:
{
"Class": "一年级2班",
"Students": [
{
"Name": "小白",
"No": 20220533,
"Sex": false
},
{
"Name": "小冰",
"No": 20220113,
"Sex": false
},
{
"Name": "小王",
"No": 20220526,
"Sex": true
}
]
}
1、Json读取 -- 类转换 -- 推荐
代码编写:
internal class Program
{
static void Main(string[] args)
{
//Json文件路径
string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";
//读取Json
string jsonText = File.ReadAllText(path);
//Json转Information类中
Information information = JsonConvert.DeserializeObject<Information>(jsonText);
//输出显示
Console.WriteLine(information.Class); //结果显示: 一年级2班
foreach (Student student in information.Students)
{
//结果显示: 小白 小冰 小王
Console.WriteLine(student.Name);
//结果显示: 20220533 20220113 20220526
Console.WriteLine(student.No);
//结果显示: False False True
Console.WriteLine(student.Sex);
}
}
}
public class Information
{
//班级
public string Class { set; get; }
//学生信息
public List<Student> Students { set; get; }
}
public class Student
{
public string Name { set; get; }
public long No { set; get; }
public bool Sex { set; get; }
}
2、Json读取 -- JObject 转换 -- 不推荐 -- 操作太麻烦
代码编写:
internal class Program
{
static void Main(string[] args)
{
//Json文件路径
string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";
try
{
//创建文件流
StreamReader file = File.OpenText(path);
//场景Json读流
JsonTextReader reader = new JsonTextReader(file);
//获取JObject类型文本
JObject jsonText = (JObject)JToken.ReadFrom(reader);
//显示班级
Console.WriteLine(jsonText["Class"]); //结果显示: 一年级2班
//遍历显示学生
jsonText["Students"].ToList()
.ForEach(x =>
{
//结果显示: 小白 小冰 小王
Console.WriteLine(x["Name"].ToString());
//结果显示: 20220533 20220113 20220526
Console.WriteLine(x["No"].ToString());
//结果显示 False False False
Console.WriteLine(x["Sex"].ToString());
});
}
catch (Exception)
{
throw;
}
}
}
3、Json读取 -- 中大型文件时使用
代码编写:
internal class Program
{
static void Main(string[] args)
{
//Json文件路径
string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";
string jsonText = string.Empty;
//遍历Json文件所有行
foreach (string line in File.ReadLines(path))
{
//json文件添加
jsonText += line + "\n";
}
Console.WriteLine(jsonText);
Console.WriteLine("Hello World!");
}
}
四、Json写入
1、Json写入 -- 类转换 -- 推荐
代码编写:
internal class Program
{
static void Main(string[] args)
{
////Json文件路径
string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";
//待写入数据配置
List<Student> students = new List<Student>()
{
new Student(){ Name = "小白",No = 20220333,Sex = false },
new Student(){ Name = "小冰",No = 20234222,Sex = false },
new Student(){ Name = "小王",No = 20232211,Sex = true }
};
Information information = new Information()
{
Class = "一年级2班",
Students = students
};
//类序列化并写入
File.WriteAllText(path, JsonConvert.SerializeObject(information));
}
}
public class Information
{
//班级
public string Class { set; get; }
//学生信息
public List<Student> Students { set; get; }
}
public class Student
{
public string Name { set; get; }
public long No { set; get; }
public bool Sex { set; get; }
}
2、Json写入 -- Json拼装(一)
代码编写:
internal class Program
{
static void Main(string[] args)
{
////Json文件路径
string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";
// 创建班级
JObject classes = new JObject(new JProperty("Class", "一年级2班"),
new JProperty("student", new JObject(
new JProperty("Name", "小白"),
new JProperty("No", 20220533),
new JProperty("Sex", false)),
new JObject(
new JProperty("Name", "小冰"),
new JProperty("No", 20220113),
new JProperty("Sex", false)),
new JObject(
new JProperty("Name", "小王"),
new JProperty("No", 20220526),
new JProperty("Sex", true))
));
//Json转string
string strSrc = Convert.ToString(classes);
//写入文件
File.WriteAllText(path, strSrc, Encoding.UTF8);
}
}
3、Json写入 -- Json拼装(二)
代码编写:
internal class Program
{
static void Main(string[] args)
{
////Json文件路径
string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";
// 创建班级
JObject classes = new JObject();
classes.Add("Class", "一年级2班");
//创建学生
JObject student_1 = new JObject();
student_1.Add("Name", "小白");
student_1.Add("No", 20220533);
student_1.Add("Sex", false);
JObject student_2 = new JObject();
student_2.Add("Name", "小冰");
student_2.Add("No", 20220113);
student_2.Add("Sex", false);
JObject student_3 = new JObject();
student_3.Add("Name", "小王");
student_3.Add("No", 20220526);
student_3.Add("Sex", true);
JArray students = new JArray();
students.Add(student_1);
students.Add(student_2);
students.Add(student_3);
//数组添加
classes.Add("Students", students);
//Json转string
string strSrc = Convert.ToString(classes);
//写入文件
File.WriteAllText(path, strSrc, Encoding.UTF8);
}
}
4、Json写入 -- DataTable转换
代码编写:
internal class Program
{
static void Main(string[] args)
{
////Json文件路径
string path = @"C:\\Users\\Rush\\Desktop\\C#\\Json\\data.json";
DataTable dt = new DataTable();
dt.TableName = "班级";
dt.Columns.Add("Name");
dt.Columns.Add("No");
dt.Columns.Add("Sex");
dt.Rows.Add("小白", 11111111, false);
dt.Rows.Add("小冰", 22222222, false);
dt.Rows.Add("小王", 33333333, true);
string jsonText = "{\n" +
"\"Class\":\"一年级2班\","+
"\"student\":" +
JsonConvert.SerializeObject(dt)+
"\n}";
File.WriteAllText(path, jsonText);
}
}
如有错误,烦请批评指正