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;}
}
相关推荐
TracyCoder123几秒前
集合(四):LinkedHashMap深度解析——有序哈希与 LRU 缓存的基石
java·哈希算法·linkedhashmap
再学一点就睡2 分钟前
IP从入门到起飞:妈妈再也不用担心我不会网络基础啦
前端·后端·tcp/ip
ZeroToOneDev3 分钟前
SpringMvc
java·spring
坚持学习前端日记5 分钟前
认证模块文档
java·服务器·前端·数据库·spring
qq_12498707538 分钟前
基于springboot的文化旅游小程序(源码+论文+部署+安装)
java·spring boot·后端·微信小程序·小程序·毕业设计·旅游
AI视觉网奇1 小时前
Uncaught SyntaxError: Failed to construct ‘RTCPeerConnection‘:
前端·javascript·html
再学一点就睡8 小时前
前端网络实战手册:15个高频工作场景全解析
前端·网络协议
num_killer8 小时前
小白的Langchain学习
java·python·学习·langchain
C_心欲无痕9 小时前
有限状态机在前端中的应用
前端·状态模式
C_心欲无痕9 小时前
前端基于 IntersectionObserver 更流畅的懒加载实现
前端