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(list1i.Name + "---" + list1i.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;}
}
相关推荐
zzz_23683 分钟前
【Java实习面试算法冲刺】哈希!
java·算法·面试
前端炒粉8 分钟前
马克思主义基本原理在Vue框架中的指导作用探析
前端·javascript·vue.js
带刺的坐椅13 分钟前
ReActAgent 使用指南:构建会思考、能行动的 AI Agent
java·ai·llm·solon·loop·react-agent
happyprince21 分钟前
12-vLLM 量化方案全面分析
前端·javascript·vllm
大圣编程23 分钟前
python break语句
开发语言·前端·python
漂亮的摩托28 分钟前
如何编写一个SpringBoot项目告警推送的Starter
java·spring boot·后端
盖伦暴打诺手34 分钟前
类比推理知识点
java
ch.ju36 分钟前
Java程序设计(第3版)第四章——类加载
java·开发语言
河阿里36 分钟前
SLF4J深度指南(Java):从原理到 Spring 项目实战
java·开发语言·spring
小沈同学呀40 分钟前
飞书机器人+Spring AI Function Calling实战-扔掉MCP Client让LLM直接操控工具
java·开发语言·functioncalling·spring ai·飞书机器人