Json数据概念及C# 环境下的序列化、反序列化操作

什么是Json?
JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式,主要用于数据的序列化和交互。常用于Web中,其他领域也经常出现JSON的身影。

与xml相比,更快,更小,更容易解析/.

Json的特点
Json的最小单元式键值对,即Key-Value组合。它的数据结构需要满足以下条件:

由键值对组成,每个键(属性名)都是一个字符串,后面跟着一个值。
值可以是字符串、数字、布尔值、对象、数组、null等。
JSON对象是由一对大括号{}包围的键值对集合,键和值之间用冒号 : 分隔。
JSON数组是由一对方括号 [] 包围的值的有序列表,值之间用逗号 , 分隔。
{
    "name": "xiaomi Su7",
    "SN": 123456,
    "isCar: true,
    "Journey": "1000km"
}
注意:在上面的示例中,name就是一个属性或者是键,后面跟一个:号,xiaomi Su7 则是值,键值对必须成对出现,键值对之间需要用,隔开.

Json值主要有以下类型:
字符串:
JSON字符串必须用双引号 " 包围,而不是单引号 ',或者没有任何引号围起来.

数字:
JSON支持整数和浮点数。

布尔值:
JSON使用true和false表示布尔值。

null:
JSON使用null表示空值或缺失的值。

嵌套结构:
JSON对象可以嵌套在其他JSON对象中,形成复杂的数据结构。数组也可以包含其他JSON值,包括对象和数组。

常用的Json库
在C#中,我们可以用这几个常用的JSON解析库来处理JSON数据;

Json.NET (Newtonsoft.Json)
Json.NET(也称为Newtonsoft.Json)是C#中最常用的JSON解析库,广泛用于处理JSON数据。


{
   "Students":[
       {"FirstName":"Jim","LastName":"Green","IsHigh":true},
       {"FirstName":"Li","LastName":"Wang","IsHigh":false},
       {"FirstName":"Li123","LastName":"Wang123","IsHigh":false}
   ]
}

{"FirstName":"Jim","LastName":"Green","IsHigh":true},表示一个对象
[]内表示一个数组,数组名称是“Students”.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace _68.myJSON
{
    class Program
    {
        static void Main(string[] args)
        {
            //Reference .Net JSON
            //using Newtonsoft.Json;
            //序列化数据,生成JSON文件
            var o1 = new Person { Name = "David", Age = 29, ID = 001 };
            var o2 = new Person { Name = "lily", Age = 25, ID = 002 };
            var o3 = new Person { Name = "Lucy", Age = 28, ID = 003 };
            var o4 = new Person { Name = "Jim", Age = 30, ID = 004 };
            var o5 = new Person { Name = "Steve", Age = 27, ID = 005 };
            Object[] objects = { o1, o2, o3, o4, o5 };
            string str_JSON = JsonConvert.SerializeObject(objects,Formatting.Indented);
            File.WriteAllText(@"D:\MyDatas.json", str_JSON);

            //解析JSON文件,反序列化操作,JSON数据是数组,元素是Person,所以反序列化操作的泛型类型参数是List<Person>,返回List<Person>
            List<Person> people = JsonConvert.DeserializeObject<List<Person>>(File.ReadAllText("D:\\MyDatas.json"));
            foreach (var item in people)
            {
                Console.WriteLine($"{item.Name},{item.Age},{item.ID}");
            }
            Console.ReadKey();
        }
    }
    public class Person
    {
        public string Name { get; set; }
        public int ID { get; set; }
        public int Age { get; set; }
    }
}

如上例,将5个Person对象组成的数组作为数据序列化成一个Json格式的文本文件,如下:

[
  {
    "Name": "David",
    "ID": 1,
    "Age": 29
  },
  {
    "Name": "lily",
    "ID": 2,
    "Age": 25
  },
  {
    "Name": "Lucy",
    "ID": 3,
    "Age": 28
  },
  {
    "Name": "Jim",
    "ID": 4,
    "Age": 30
  },
  {
    "Name": "Steve",
    "ID": 5,
    "Age": 27
  }
]

然后我们呢通过泛型反序列化函数DeserializeObject<List<Person> >,将Json格式的文本文件转换成List<Person> 对象,循环得到的集合数据如下:

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值