json序列化和反序列化 和 数组转成json格式

json

文件内容存储的格式

1 json格式,[] 代表数组 { }

代表对象 ,

json字符串要求:属性必须使用""括起来,属性值可以基本数据类型也可以对象类型,不能是函数,

最后一个属性值不能带逗号

json字符串格式

{

"name":"zs",

"age":10

}

序列化: 把对象转成字符串

反序列化:把字符串格式转成对象

目的:先把对象转成json字符串格式。再通过之前学的写入对象写到文本中,

读取的先从文档读取成一个字符串,再把字符转成对应的对象,

2 xml格式

3 ini格式

4 csv格式

直接使用第三方进行json序列化

使用JSon.net第三方:点击引用--->管理nuget程序包--->切换浏览输入第三方包名关键字------ > 点击右边安装,

序列化过程

SerializeObject()把对象转成字符串

解析对象,把对象转成字符串,参数转成字符串的对象 例如p1转成字符串,

File.WriteAllText()写入指定文档

反序列化过程

string ss = File.ReadAllText();读取

People pp = JsonConvert.DeserializeObject<People>(ss);把字符串转成对象

注People是类

实例

cs 复制代码
 internal class Program
 {
     static void Main(string[] args)
     {
         

         //1把对象存储到文档中
         People p1 = new People() { Name="张三",Age = 10};
         //把对象转成json字符串
         //序列化过程
         //SerializeObject() 解析对象,把对象转成字符串,参数转成字符串的对象 例如p1转成字符串,
         string dataString =  JsonConvert.SerializeObject(p1);
         //Console.WriteLine(dataString+"----");
         //写入指定文档
         File.WriteAllText(@"1.txt", dataString);

         //2 读取
         string ss = File.ReadAllText(@"1.txt");
         //反序列化过程
         //把字符串转成对象
        People pp = JsonConvert.DeserializeObject<People>(ss);
        Console.WriteLine(pp.Name+"----"+pp.Age);
        Console.ReadKey(); 
     }
 }
 class People
 {
     public string Name { get; set; }
     public int Age { get; set; }
 }

数组转成json格式

把数组转成json字符串

string data = JsonConvert.SerializeObject(list); list是数组

写入文档

using (StreamWriter sw = new StreamWriter(@"1.json"))

{

sw.WriteLine(data);

}

读取本地文件值是字符串

using (StreamReader sr = new StreamReader(@"1.json"))

{

string lines;

while ((lines = sr.ReadLine()) != null)

{

Console.WriteLine(lines);

List<Student> list1 = JsonConvert.DeserializeObject<List<Student>>(lines);

for (int i = 0; i < list1.Count; i++)

{

Console.WriteLine(list1[i].Name + "---" + list1[i].Age);

}

}

}

实例

cs 复制代码
 internal class Program
 {
     static void Main(string[] args)
     {
         List<Student> list = new List<Student>();
         for (int i = 0; i < 10; i++)
         {
             Student s = new Student();
             s.Name = "粮仓" + i + "号";
             s.Age = i+18;
             s.Id = "00" + i;
             list.Add(s);
         }
         //把数组转成json字符串 存储本地文
         string data = JsonConvert.SerializeObject(list);
         // Console.WriteLine(data);
         using (StreamWriter sw = new StreamWriter(@"1.json"))
         {
             sw.WriteLine(data);//写入文档
         }


         //读取本地文件值是字符串
         using (StreamReader sr = new StreamReader(@"1.json"))
         {
             string lines;
             while ((lines = sr.ReadLine()) != null)
             {
                 Console.WriteLine(lines);
                 List<Student> list1 = JsonConvert.DeserializeObject<List<Student>>(lines);
                 for (int i = 0; i < list1.Count; i++)
                 {
                     Console.WriteLine(list1[i].Name + "---" + list1[i].Age);
                 }
             }
         }


             Console.ReadLine();
     }
 }
 class Student
 {
     public string Id { get; set; }
     public string Name { get; set; }
     public int Age { get; set; }
 }

难度提升 实例2

cs 复制代码
internal class Program
{
    static void Main(string[] args)
    {
        //从本地读取数据
       string data =  File.ReadAllText(@"新建文本文档.txt");
        //Console.WriteLine(data);

       RootData root = JsonConvert.DeserializeObject<RootData>(data);
        //Console.WriteLine(root.topicMessageList.Count);//16

        for (int i = 0; i < root.topicMessageList.Count; i++)
        {
          TopicMessageList top = root.topicMessageList[i]; //topicMessageList每一个对象
          Console.WriteLine(top.title+"----"+top.author_name+"---"+top.cover_image_url);
        }
        Console.ReadKey();
    }
}
/// <summary>
/// 根数据
/// </summary>
class RootData 
{
  public int code { get; set; }
  public string message { get; set; }
  public int total { get; set; }

  public List<TopicMessageList> topicMessageList {  get; set; } //这个集合是存储的下面类TopicMessageList的对象

}
class TopicMessageList
{
 public string title {  get; set; }
 public string author_name { get; set; }
  public string cover_image_url { get; set;}
}
相关推荐
码界奇点2 小时前
基于Spring Boot的后台管理系统设计与实现
java·spring boot·后端·车载系统·毕业设计·源代码管理
零度念者2 小时前
Java IO/NIO 深度解析:从底层原理到高性能图片网关实战
java·nio
林太白2 小时前
2025 AI浪潮下的编程之路:我的天工项目与终身学习
前端·后端·trae
再花2 小时前
VitePress+Github Pages实现静态文档站
前端
这是程序猿2 小时前
基于java的ssm框架经典电影推荐网站
java·开发语言·spring boot·spring·经典电影推荐网站
Lsx_2 小时前
案例+图解带你一文读懂Svg、Canvas、Css、Js动画🔥🔥(4k+字)
前端·javascript·canvas
Nan_Shu_6142 小时前
学习:Java (1)
java·开发语言·学习
十一.3662 小时前
127-130 定时器的简介,切换图片练习,修改div移动练习,延时调用
前端·javascript·html