前言
最近初接触
C#
语言,发现JSON
解析这块和JAVA
差异过大,所以针对简单的JSON
操作,如String
、int
、Array
常用类型进行演示、留存,便于以后的使用。
使用的库
本文使用到了
Newtonsoft.Json
库,使用时可直接在NuGet程序包
中进行安装。
- 使用到的命名空间如下:
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
生成JSON
手动生成
public static String generateJsonStr()
{
//生成JSON
JObject rootJ = new JObject();
rootJ["className"] = "六年级一班";
rootJ["classTeacher"] = "张欣悦";
JArray datas = new JArray();
//生成第1条数据
JObject itemJ1 = new JObject();
itemJ1["name"] = "张天明";
itemJ1["sex"] = "男";
itemJ1["age"] = 14;
JArray majorCouse1 = new JArray();
majorCouse1.Add("语文");
majorCouse1.Add("数学");
majorCouse1.Add("音乐");
itemJ1["majorCourse"] = majorCouse1;
datas.Add(itemJ1);
//生成第2条数据
JObject itemJ2 = new JObject();
itemJ2["name"] = "刘一一";
itemJ2["sex"] = "女";
itemJ2["age"] = 15;
JArray majorCouse2 = new JArray();
majorCouse2.Add("语文");
majorCouse2.Add("数学");
majorCouse2.Add("舞蹈");
itemJ2["majorCourse"] = majorCouse2;
datas.Add(itemJ2);
rootJ["datas"] = datas;
return rootJ.ToString();
}
序列化对象
using Newtonsoft.Json;
//将对象序列化为JSON数据
String JsonStr = JsonConvert.SerializeObject(studentBean);
解析JSON
手动解析
注意:此处转换为
List
集合时,不可将包含多种类型的数组转换为List
集合,会失败!目前使用的数据格式如:"majorCourse": ["语文","数学","音乐"]
JObject rootJ = JObject.Parse(JsonStr);
String className = rootJ.Value<String>("className");
String classTeacher = rootJ.Value<String>("classTeacher");
JArray rootJA = rootJ.Value<JArray>("datas");
foreach (JObject itemJ in rootJA)
{
String name = itemJ.Value<String>("name");
String sex = itemJ.Value<String>("sex");
String age = itemJ.Value<String>("age");
//直接将Strijng类型的Json数组转换为List集合
List<String> majorCourse = itemJ.Value<JArray>("majorCourse").ToObject<List<String>>();
printLog("name="+ name + ",sex="+sex + ",age=" + age + majorCourse[0]);
foreach(String item in majorCourse)
{
printLog("课程:" + item);
}
}
项目中使用的数据
生成的JSON数据
{
"className": "六年级一班",
"classTeacher": "张欣悦",
"datas": [
{
"name": "张天明",
"sex":"男",
"age":14,
"majorCourse": [
"语文",
"数学",
"音乐"
]
},
{
"name": "刘一一",
"sex": "女",
"age": 15,
"majorCourse": [
"语文",
"数学",
"舞蹈"
]
}
]
}
源码
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WindowsFormsApp1.json.bean;
namespace WindowsFormsApp1.json
{
class JsonDemo
{
public static void JsonDemoStart()
{
String jsonStr = generateJsonStr();
printLog("生成的JSON数据为:" + jsonStr.ToString());
//反序列化为对象Bean
StudentBean studentBean = JsonConvert.DeserializeObject<StudentBean>(jsonStr);
//获取数据
printLog("班主任姓名为:" + studentBean.classTeacher);
printLog("学生信息为:" + studentBean.datas[0]);
//将对象序列化为JSON数据
String JsonStr = JsonConvert.SerializeObject(studentBean);
printLog("序列化Json数据:" + JsonStr);
//手动JSON解析
JObject rootJ = JObject.Parse(JsonStr);
String className = rootJ.Value<String>("className");
String classTeacher = rootJ.Value<String>("classTeacher");
JArray rootJA = rootJ.Value<JArray>("datas");
foreach (JObject itemJ in rootJA)
{
String name = itemJ.Value<String>("name");
String sex = itemJ.Value<String>("sex");
String age = itemJ.Value<String>("age");
//直接将Strijng类型的Json数组转换为List集合
List<String> majorCourse = itemJ.Value<JArray>("majorCourse").ToObject<List<String>>();
printLog("name="+ name + ",sex="+sex + ",age=" + age + majorCourse[0]);
foreach(String item in majorCourse)
{
printLog("课程:" + item);
}
}
}
public static String generateJsonStr()
{
//生成JSON
JObject rootJ = new JObject();
rootJ["className"] = "六年级一班";
rootJ["classTeacher"] = "张欣悦";
JArray datas = new JArray();
//生成第1条数据
JObject itemJ1 = new JObject();
itemJ1["name"] = "张天明";
itemJ1["sex"] = "男";
itemJ1["age"] = 14;
JArray majorCouse1 = new JArray();
majorCouse1.Add("语文");
majorCouse1.Add("数学");
majorCouse1.Add("音乐");
itemJ1["majorCourse"] = majorCouse1;
datas.Add(itemJ1);
//生成第2条数据
JObject itemJ2 = new JObject();
itemJ2["name"] = "刘一一";
itemJ2["sex"] = "女";
itemJ2["age"] = 15;
JArray majorCouse2 = new JArray();
majorCouse2.Add("语文");
majorCouse2.Add("数学");
majorCouse2.Add("舞蹈");
itemJ2["majorCourse"] = majorCouse2;
datas.Add(itemJ2);
rootJ["datas"] = datas;
return rootJ.ToString();
}
public static void printLog(String log)
{
Console.WriteLine(log);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApp1.json.bean
{
class StudentBean
{
public String className
{
get;
set;
}
public String classTeacher
{
get;
set;
}
public List<StudentItemBean> datas
{
get;
set;
}
}
class StudentItemBean
{
public String name
{
get;
set;
}
public String sex
{
get;
set;
}
public int age
{
get;
set;
}
public List<String> majorCourse
{
get;
set;
}
public override String ToString()
{
return String.Format("[name={0},sex={1},age={2},majorCourse={3}]", name, sex, age, majorCourse);
}
}
}