用学校作为例子,有学校名称,学校下面有班级,班级有名字,班级下面有学生,这里面有数组,有字段
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JsonDemo
{
public class School
{
public string SchoolName { get; set; }
public List<Grade> Grades { get; set; } = new List<Grade>();
}
public class Grade
{
public string GradeName { get; set; }
public List<Student> Students { get; set; } = new List<Student>();
}
public class Student
{
public string StudentName { get; set; }
}
}
主程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JsonDemo
{
class Program
{
static void Main(string[] args)
{
School school = new School();
school.SchoolName = "某某某小学";
Grade grade1 = new Grade();
grade1.GradeName = "1班";
Student student = new Student();
student.StudentName = "小张";
grade1.Students.Add(student);
Grade grade2 = new Grade();
grade2.GradeName = "2班";
Grade grade3 = new Grade();
grade3.GradeName = "3班";
school.Grades.Add(grade1);
school.Grades.Add(grade2);
school.Grades.Add(grade3);
ParameterByJson parameterByJson = new ParameterByJson();
string jsonText1 = parameterByJson.SchoolToText(school);
School school1 = parameterByJson.TextToSchool(jsonText1);
parameterByJson.WriteText("test.json", jsonText1);
string jsonText2 = parameterByJson.ReadFileText("test.json");
School school2 = parameterByJson.TextToSchool(jsonText2);
}
}
}
Json类,包含了json数组的生成和转换
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JsonDemo
{
public class ParameterByJson
{
/// <summary>
/// 读取JSON
/// </summary>
private JObject ReadStringJson(string json)
{
JObject jObject = (JObject)JsonConvert.DeserializeObject(json);
return jObject;
}
/// <summary>
/// 读取JSON文件
/// </summary>
private JObject ReadFileJson(string jsonFile)
{
try
{
using (System.IO.StreamReader file = System.IO.File.OpenText(jsonFile))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
JObject jObject = (JObject)JToken.ReadFrom(reader);
return jObject;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return null;
}
}
public string ReadFileText(string jsonFile)
{
try
{
string text = "";
using (System.IO.StreamReader file = System.IO.File.OpenText(jsonFile))
{
text = file.ReadToEnd();
}
return text;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return null;
}
}
/// <summary>
/// 写入JSON文件
/// </summary>
/// <param name="jsonFile"></param>
/// <param name="jObject"></param>
private void WriteJson(string jsonFile, JObject jObject)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(jsonFile))
{
file.Write(jObject.ToString());
}
}
/// <summary>
/// 写入JSON文件
/// </summary>
/// <param name="jsonFile"></param>
/// <param name="jObject"></param>
public void WriteText(string jsonFile, string jsonStr)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(jsonFile))
{
file.Write(jsonStr);
}
}
/// <summary>
/// 效验文件夹,没有就创建
/// </summary>
private void DirectoryCheak(string path)
{
if (false == System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);
}
}
public string SchoolToText(School school)
{
try
{
//设定小驼峰模式,属性名首字母小写
var setting = new JsonSerializerSettings
{
ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
};
return JsonConvert.SerializeObject(school, setting);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return null;
}
}
public string SchoolToTextComplex(School school)
{
try
{
JObject jObject = new JObject();
jObject.Add("school", new JObject());
JObject jObjectSchool = (JObject)jObject["school"];
jObjectSchool.Add("schoolName", new JObject());
jObjectSchool["schoolName"] = school.SchoolName;
jObjectSchool.Add("grades", new JArray());
JArray JArrayGrades = (JArray)jObjectSchool["grades"];
for (int i = 0; i < school.Grades.Count; i++)
{
JObject jObjectGrade = new JObject();
jObjectGrade.Add("gradeName", new JObject());
JObject jObjectGradeName = (JObject)jObjectGrade["gradeName"];
JArrayGrades.Add(jObjectGrade);
}
//太复杂了,省略了
return JsonConvert.SerializeObject(jObject);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return null;
}
}
public School TextToSchool(string jsonText)
{
try
{
if (!String.IsNullOrEmpty(jsonText))
{
//设定小驼峰模式,属性名首字母小写
var setting = new JsonSerializerSettings
{
ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
};
return JsonConvert.DeserializeObject<School>(jsonText, setting);
}
else
{
return null;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return null;
}
}
public School TextToSchoolComplex(string jsonText)
{
try
{
if (!String.IsNullOrEmpty(jsonText))
{
JObject jObject = (JObject)JsonConvert.DeserializeObject(jsonText);
School school = new School();
school.SchoolName = jObject["school"].ToString();
JArray items = JArray.Parse(jObject["grades"].ToString());
List<Grade> grades = new List<Grade>();
foreach (var item in items)
{
JObject itmeTemp = JObject.Parse(item.ToString());
Grade grade = new Grade();
grade.GradeName = itmeTemp["gradeName"].ToString();
grades.Add(grade);
}
school.Grades = grades;
//省略一部分,太麻烦了
return school;
}
else
{
return null;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return null;
}
}
}
}
Demo地址
https://download.csdn.net/download/g313105910/16346139
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)