Json序列化与反序列化
一. 读取项目中json文件并转为List
1. frequency.json 文件内容类似如下:
[ { "Subsyatem": "SA", "Band": "n1", "NrStartFreq": 1920, "NrStopFreq": 1980 }, { "Subsyatem": "NSA", "Band": "DC_3A_n79A", "NrStartFreq": 4400, "NrStopFreq": 5000, "LteStartFreq": 1710, "LteStopFreq": 1785 }, { "Subsyatem": "SA", "Band": "n79", "NrStartFreq": 4400, "NrStopFreq": 5000 } ]
json文件右击 属性,复制到输出目录 ->始终复制, 生成操作->内容

2. 新建Frequency 实体类
public class Frequency { public string Subsyatem { get; set; } public string Band { get; set; } public string NrStartFreq { get; set; } public string NrStopFreq { get; set; } public string LteStartFreq { get; set; } public string LteStopFreq { get; set; } }
3.读取json 文件
string path = Path.Combine(Directory.GetCurrentDirectory(), "frequency.json"); string JsonStr=""; using (StreamReader r1 = new StreamReader(path))//读取json文件 { string line; //定义string,读取每一行数据 while ((line = r1.ReadLine()) != null) //循环将每一行数据拼接为一个完整的字符串 { JsonStr = JsonStr + line; //拼接 } }
4.json格式转为List<T>
public static List<T> JSONStringToList<T>(string JsonStr) { JavaScriptSerializer Serializer = new JavaScriptSerializer(); List<T> objs = Serializer.Deserialize<List<T>>(JsonStr); return objs; }
注:此时需引用
using Newtonsoft.Json;
using System.Web.Script.Serialization;
5.调用 JSONStringToList 并转化为List<T>
List<Frequency> list = JSONStringToList<Frequency>(JsonStr);
二.读写json文件,转为实体类
1.添加实体类
public class Student { public string Name { get; set; } public double Chinese { get; set; } public double Math { get; set; } public double English { get; set; } public string Sex { get; set; } public bool IsSuperScholar { get; set; } } public class Teacher { public string Name { get; set; } } public class Person { public List<Student> Students { get; set; } public Teacher Teacher { get; set; } } public class Root { public Person Persons { get; set; } }
2.实体类写入到json文件中
Root root = new Root(); Person person = new Person(); List<Student> students = new List<Student>(); Student student1 = new Student(); student1.Name="lulu"; student1.Chinese = 89; student1.Math = 80; student1.English = 77; student1.Sex = "Boy"; student1.IsSuperScholar = false; students.Add(student1); Student student2 = new Student(); student2.Name = "yuny"; student2.Chinese = 96; student2.Math = 100; student2.English = 99; student2.Sex = "Boy"; student2.IsSuperScholar = true; students.Add(student2); person.Students = students; Teacher teacher = new Teacher(); teacher.Name = "jims"; person.Teacher = teacher; root.Persons = person; string jsondata = JsonConvert.SerializeObject(root); //class类转string using (StreamWriter sw = new StreamWriter(Path.Combine(Directory.GetCurrentDirectory(), "config.json"))) //将string 写入json文件 { sw.WriteLine(jsondata); }
3.读取并转化为实体类
string JsonStr=""; using (StreamReader r1 = new StreamReader(Path.Combine(Directory.GetCurrentDirectory(), "config.json")))//读取json文件 { string line; //定义string,读取每一行数据 while ((line = r1.ReadLine()) != null) //循环将每一行数据拼接为一个完整的字符串 { JsonStr = JsonStr + line; //拼接 } } Root rt = JsonConvert.DeserializeObject<Root>(JsonStr); //方法一
Root rt1 = Deserialize<Root>(JsonStr); //方法二
4. 实体类转换的方法
public static T Deserialize<T>(string json) { T obj = Activator.CreateInstance<T>(); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); return (T) serializer.ReadObject(ms); } }
注:调用 DataContractJsonSerializer 类 需引用 using System.Runtime.Serialization.Json;

浙公网安备 33010602011771号