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;}
}
相关推荐
崔庆才丨静觅18 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
曹牧19 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
passerby606119 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了19 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅19 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅19 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
爬山算法19 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty72520 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎20 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄20 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea