JSON简介与及.NET中如何使用

一、JSON定义

JSON (JavaScript Object Notation) 是一种基于文本,独立于语言的轻量级数据交换格式,它易于阅读和编写,并且易于机器解析和生成。现已成为各种应用程序之间数据交换和通信的主流数据格式。

二、JSON数据结构

JSON有两种数据结构,分别为键值对(被理解为对象、结构等)的集合与值的有序列表(被理解为数组)。

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

  • 键值对组成,每个键(属性名)都是一个字符串,后面跟着一个值。

  • 可以是字符串、数字(整数和浮点数)、布尔值true或false、对象、数组、null(空值缺失的值)等。

  • 对象是由一对大括号{}包围的键值对集合,键和值之间用冒号:分隔。

  • 数组是由一对方括号[]包围的值的有序列表,值之间用逗号,分隔。

   一个常规JSON示例如下:

{
  "name": "dotNet开发技术分享",
  "quantity": 30,
  "city": shenzhen,
  "isRead": true,
  "content": ["知识", "案例","工具"]
}

JSON对象可以嵌套在其他JSON对象中,形成复杂的数据结构。数组也可以包含其他JSON值,包括对象和数组。我们来看一个示例:

{
"name": "dotNet开发技术分享",
"quantity": 23,
"isRead": true,
"content": ["知识", "案例","工具"],
"article": [{
"name": ".NET 发展历程与未来",
"url": "https://mp.weixin.qq.com/s/7i_jev-UlYfdV6Gfs9ONrg"
}, {
"name": ".NET 如何实现与串口设备通信",
"url": "https://mp.weixin.qq.com/s/OpV0dKlZ2pX-8Wl8MqwkQA"
}]
}
三、JSON缺点
  1. 不支持注释: 这可能使得编写和维护复杂数据时变得有些困难。

  2. 无法表示二进制数据:这意味着它无法用于存储和传输图像、视频等二进制数据。

  3. 不支持命名空间:这可能会导致不同的应用程序之间发生命名冲突。

  4. 不支持DTD:这使得在验证 JSON 数据格式时不太方便。

四、JSON 注意事项
  • 字符串必须使用双引号" ",而不能使用单引号'  '。

  • 键必须是字符串,必须使用双引号" "。

  • 格式必须严格遵守规定,否则可能会导致解析错误。

五、.NET使用JSON

在这主要讲解C#语言中,我们是如何生成与解析JSON数据,在C#中有几个常用的JSON解析库,它们分别是System.Text.Json、Newtonsoft.Json、JavaScriptSerializer、DataContractJsonSerializer。

  1. Newtonsoft.Json

    1.1、是C#中最常用的JSON解析库,广泛用于处理JSON数据。

    1.2、它提供了丰富的功能,包括对象序列化、反序列化、LINQ查询、处理嵌套对象和数组、自定义序列化、自定义命名策略等等。

    1.3、它支持.NET框架和.NET Core,并且在开发社区中有广泛的支持和文档。

  2. System.Text.Json

    2.1、是.NET Core 3.0及更高版本中引入的官方JSON库。它提供了基本的2.2、JSON序列化和反序列化功能,是.NET Core的一部分,无需额外安装。2.3、由于是官方支持的库,因此在.NET Core应用中使用时,它具有性能和可移植性方面的优势。

  3. DataContractJsonSerializer

    3.1、是.NET Framwork3.5自带的System.Runtime.Serialization.Json。

    3.2、它提供了基本的JSON序列化和反序列化功能。

    3.3、需要添加引用System.ServiceModel.Web 和 System.Runtime.Serialization。

  4. JavaScriptSerializer

    4.1、需要添加引用System.Web.Extensions.dll,该类位于

    4.2、System.Web.Script.Serialization命名空间下。

六、案例

案例主要介绍Newtonsoft.Json 的使用以及操作,我们可以通过指令在visual studio中安装或者通过NuGet包管理器来安装,也可去官网下在Newtonsoft.Json.dll文件后引用到项目中。这需根据项目使用.NET 版本情况而定。这里主要从序列化和反序列化来举例:

  • 序列化

    序列化是将我们代码中的对象转换为JSON字符串数据格式。下面看一段代码:

    using Newtonsoft.Json;
    using System;
    
    namespace JsonExample
    {
      class Program
      {  
          static void Main(string[] args)
          {
          try
          {
                  // 创建执行结果对象
                  RequestResult pequestResult = new RequestResult
                  {
                      Cmd = "Print",
                      RequestID = "ID20240111210000001",
                      Status = true,
                      Message=string.Empty
                  };
                  // 将对象序列化为JSON字符串
                  string pequestResultJson = JsonConvert.SerializeObject(pequestResult);
          }
          catch (Exception ex)
          {
          }
          }
      }
      /// <summary>
      /// 请求执行结果
      /// </summary>
      [DataContract(Namespace = "")]
      public class RequestResult
      {
          /// <summary>
          /// 指令
          /// </summary>
          [DataMember(Order = 0)]
          public string Cmd { get; set; }
          /// <summary>
          /// 请求ID
          /// </summary>
          [DataMember(Order = 1)]
          public string RequestID { get; set; }
          /// <summary>
          /// 状态
          /// </summary>
          [DataMember(Order = 2)]
          public bool Status { get; set; }
          /// <summary>
          /// 信息
          /// </summary>
          [DataMember(Order = 3)]
          public string Message { get; set; }
      }
    }
  • 反序列化

    反序列化是将JSON字符串数据格式转换为代码对象。 下面看一段代码:

    using Newtonsoft.Json;
    using System;
    
    namespace JsonExample
    {
      class Program
      {  
          static void Main(string[] args)
          {
          try
          {
          // JSON字符串示例
              string jsonContent = "{\"Cmd\":\"Print\",\"RequestID\":\"ID20240111210000002\",\"Status\":false,\"Message\":\"\"}";
              // 将JSON字符串反序列化为C#对象
              RequestResult pequestResult = JsonConvert.DeserializeObject<RequestResult>(jsonContent);
                   
          }
          catch (Exception ex)
          {
          }
          }
      }
      /// <summary>
      /// 请求执行结果
      /// </summary>
      [DataContract(Namespace = "")]
      public class RequestResult
      {
          /// <summary>
          /// 指令
          /// </summary>
          [DataMember(Order = 0)]
          public string Cmd { get; set; }
          /// <summary>
          /// 请求ID
          /// </summary>
          [DataMember(Order = 1)]
          public string RequestID { get; set; }
          /// <summary>
          /// 状态
          /// </summary>
          [DataMember(Order = 2)]
          public bool Status { get; set; }
          /// <summary>
          /// 信息
          /// </summary>
          [DataMember(Order = 3)]
          public string Message { get; set; }
      }
    }
    七、总结

    本文先介绍什么JSON以及数据格式、缺点,然后通过一个案例了解在.NET中通过类库简单的JSON使用。希望大家通过本文有所收获。后续还会对.NET 如何使用或者针对相关类库深入介绍。

获取更多C#知识可关注【dotNet开发技术分享】公众号

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fountyuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值