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;

posted @ 2022-07-29 14:07  霓裳Toy  阅读(255)  评论(0)    收藏  举报