1. JSON 格式
实体类格式:
public class Student {
public string name {get; set;}
public int age {get; set;}
}
public class Classs {
public string teacher {get; set;}
public List<Student> students {get; set;}
}
JSON格式(格式化):
{
"teacher": "xxxxx",
"students": [
{
"name": "Rufus",
"age": "1"
},
{
"name": "Marty",
"age": "2"
}
]
}
JSON字符串(序列化)
"{\"teacher\":\"xxxxx\",\"students\":[{\"name\":\"Rufus\",\"age\":\"1\"},{\"name\":\"Marty\",\"age\":\"2\"}]}"
术语名称:
JSON格式化:就是将JSON数据转换成易于阅读的格式的过程,整体的阅读会更加美观易阅读。
JSON序列化:将一个对象或数据结构转换为JSON格式的字符串的过程.
JSON反序列化:将JSON格式的数据转换为程序中的对象或数据结构的过程.
应用:
namespace TestOfPractice {
public class Program {
public static void Main(string[] args) {
string requestBodyStr = "{\t\"teacher\":\"xxxxx\",\t\"students\":[\t\t{\"name\":\"Rufus\",\"age\":\"1\"},\t\t{\"name\":\"Marty\",\"age\":\"2\"}\t]}";
Classs request = JsonConvert.DeserializeObject<Classs>(requestBodyStr); // 反序列化
Console.WriteLine(request);
string s = JsonConvert.SerializeObject(request); // 序列化
Console.WriteLine(s);
}
}
public class Student {
public string name {get; set;}
public int age {get; set;}
}
public class Classs {
public string teacher {get; set;}
public List<Student> students {get; set;}
}
}
/*
TestOfPractice.Classs
{"teacher":"xxxxx","students":[{"name":"Rufus","age":1},{"name":"Marty","age":2}]}
*/
1.1 JObject | JArray
已经了解 JsonConvert 基类转化 json 数据格式之后,我们能否拥有更简洁的方法直接操作对应的 json 数据呢,在不借助自定义类的情况下直接对 json 数据本身的格式进行处理操作,直接生成利于数据传输过程当中的json数据呢?
答案是有的. json 数据转化格式往往最外层对应的就是对象或者数组,系统提供了 JObject、JArray 来分别处理两种类型的 json数据.
Jobject - 操作Json对象
public static void Main(string[] args) {
JObject job = new JObject();
// 增添对象键值对
job.Add("name", "zhangsan");
job.Add("age", 16);
// 转json格式
string json = job.ToString();
Console.WriteLine(json);
// 直接操作json
job["age"] = 17;
}
JArray - 操作Json数组
public static void Main(string[] args) {
string s = "[true, 2, null, \"123\"]";
JArray jar = JArray.Parse(s);
// 增、删、改
jar.Add("345");
jar.RemoveAt(0); // 索引删除
jar[0] = false;
Console.WriteLine(jar.ToString());
}
1.2 JToken
JToken是这些Json数据的基类,包括JObject、JArray、JValue、JProperty等. 提供更加通用的方法处理Json数据.
public static void Main(string[] args) {
string s = "[true, 2, null, \"123\"]";
JArray jar = JArray.Parse(s);
JToken jto = jar;
foreach(var item in jto.Children()){
Console.WriteLine(item);
}
}
2. 细节
1. local.settings.json当中设置的一些环境变量键值对如果需要后期被获取使用,其格式必须为序列化的字符串样式不能继续按照JSON格式写,
{
"Values": {
"requestBodyStr": "{\t\"teacher\":\"xxxxx\",\t\"students\":[\t\t{\"name\":\"Rufus\",\"age\":\"1\"},\t\t{\"name\":\"Marty\",\"age\":\"2\"}\t]}"
}
}
-- Environment.GetEnvironmentVariable("requestBodyStr");
-- 系统获取环境变量参数设置时其对应的值应该设置为序列化字符串的样式,不能按照Json数据格式写其JSon格式化
的数据.