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;}
}
相关推荐
重庆小透明5 分钟前
【搞定面试之mysql】第三篇 mysql的锁
java·后端·mysql·面试·职场和发展
RuoyiOffice13 分钟前
企业请假销假系统设计实战:一张表、一套流程、两段生命周期——BPM节点驱动的表单变形术
java·spring·uni-app·vue·产品运营·ruoyi·anti-design-vue
鹤旗14 分钟前
While语句,do-while语句,for语句
java·jvm·算法
喝拿铁写前端20 分钟前
一套面向 Web、H5、小程序与 Flutter 的多端一致性技术方案
前端·架构
小碗羊肉24 分钟前
【从零开始学Java | 第十八篇】BigInteger
java·开发语言·新手入门
yaaakaaang26 分钟前
(一)前端,如此简单!---下载Nginx
前端·nginx
牛奶31 分钟前
为什么全国人民都能秒开同一个视频?
前端·http·cdn
sky wide34 分钟前
[特殊字符] Docker Swarm 集群搭建指南
java·docker·容器
wuqingshun31415939 分钟前
谈谈你对springAop动态代理的理解?
java·jvm
执笔画流年呀41 分钟前
PriorityQueue(堆)续集
java·开发语言