C# 操作JSON的几种方式

2023-11-12

关于Json数据在开发中的重要性,自然不言而喻;

本篇通过两种在c#中常用的方式来实现对Json数据的序列化和反序列化,为了实现大多数的需求,我们采用稍微复杂一点的数据模型。

首先我们有以下json数据

{
  "name": "张三",
  "age": 20,
  "idCard": "123456789",
  "birthday": "2021-01-01 00:00:00",
  "hobbys": [
    {
      "sort": 1,
      "desc": "写字"
    },
    {
      "sort": 2,
      "desc": "游泳"
    }
  ]
}

然后我们根据json的结构创建一个实体类

 private class Studet
{
    public string name { get; set; }
    public int age { get; set; }
    public string idCard { get; set; }
    public DateTime birthday { get; set; }
    public List<hobby> hobbys { get; set; }
}
private class hobby
{
    public int sort { get; set; }
    public string desc { get; set; }
}

第一种方式:JavaScriptSerializer

//需添加引用:System.Web.Extensions
//需导入命名空间:using System.Web.Script.Serialization;

//json.txt中的数据为上面的json数据
string json = File.ReadAllText("d:\\json.txt");

JavaScriptSerializer jss = new JavaScriptSerializer();
//反序列化成Studet对象
Studet student = jss.Deserialize<Studet>(json);
//然后就可以直接用操作对象的方法直接点出来就行
//输出:张三
Console.WriteLine(student.name);

//同样的,我们可以将上面的对象序列化成一个json数据
//序列化成json
string resultJson = jss.Serialize(student);
Console.WriteLine(resultJson);

第二种方式:JSON.NET

//需添加引用:Newtonsoft.Json
//需导入命名空间:using Newtonsoft.Json; using Newtonsoft.Json.Linq;

 //反序列化成对象
Studet student = JsonConvert.DeserializeObject<Studet>(json);
//输出:张三
Console.WriteLine(student.name);

//序列化成json
string resultJson = JsonConvert.SerializeObject(student);
Console.WriteLine(resultJson);

以上是我们通过json结构映射实体类的方式去实现的解析json数据,很多时候我们可能并不需要,或者并不想创建太多的类,这时候我们可以通过以下方式去实现解析

//使用JObject(JSON.NET)
//反序列化成JObject
JObject jobj = JObject.Parse(json);
//输出:张三
Console.WriteLine(jobj["name"].ToString());
//解析hobbys
 JArray jarr = JArray.Parse(jobj["hobbys"].ToString());
//迭代jarr即可

//同样的,假如我们有一个JObject对象
 JObject obj = new JObject();
 obj["name"] = "张三";
 obj["age"] = 20;
 //输出json数据,直接ToString()就可以
 Console.WriteLine(obj.ToString());

如果说你的Json结构是一个数组形式的话,即[{},{},{}],我们可以通过以下方式去解析

//第一种:DataTable
DataTable dt = JsonConvert.DeserializeObject<DataTable>(json);
//或者使用JavaScriptSerializer
dt =jss.Deserialize<DataTable>(json);
//解析DataTable即可


//第二种:JArray
JArray jarr = JArray.Parse(json);
//然后去迭代jarr即可
foreach (var j in jarr)
{
    Console.WriteLine(j["key"]);
}

//第三种,也就是我们上面提到了有实体类的情况下
List<Studet> list = JsonConvert.DeserializeObject<List<Studet>>(json);

以上基本可以解决我们的日常开发需求,个人推荐使用JSON.NET,下一篇会再介绍下JSON.NET的部分高级用法,用来满足我们的一些特殊需求。

由简入繁,拿来即用

更多精彩,请关注微信公众号:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 操作JSON的几种方式 的相关文章

随机推荐

  • 阿里云DataWorks开发UDF函数,自定义一周开始时间

    今天使用阿里云套件quick bi开发一个报表 需求是自定义上周六到本周五为自然周来统计周指标 常规日期函数已经不能满足此需求 需自定义UDF函数来实现 具体解决过程如下 知识储备 我们知道hive有一个日期转周函数 weekofyear
  • MySQL高级语句(二):VIEW视图、正则及常见计算

    目录 一 VIEW 视图 1 1 概念 1 2 创建 查看和删除视图 二 联集 2 1 UNION 2 1 UNION ALL 三 交集值 3 1 两表没有单独重复的行 并且确实有交集的时候用 3 2 取两个SQL语句结果的交集 且没有重复
  • 环境搭建:Win 10 + Eclipse 搭建 C/C++ 开发环境

    Win 10 Eclipse 搭建 C C 开发环境 最近想利用 Eclipse 搭建一个 C C 开发环境 本以为是件很容易的事情 毕竟很久之前也搭建过 没想到耗了半天的时间 踩了好久的坑 在此记录一下实验过程 为什么用 Eclipse
  • Connect-The-Dots靶场

    靶场下载 https www vulnhub com entry connect the dots 1 384 一 信息收集 探测存活主机 netdiscover r 192 168 16 161 24 nmap sP 192 168 16
  • spring 多租户_使用Spring Security的多租户应用程序的无状态会话

    spring 多租户 从前 我发表了一篇文章 解释了构建无状态会话的原理 巧合的是 我们再次为多租户应用程序执行同一任务 这次 我们将解决方案集成到Spring Security框架中 而不是自己构建身份验证机制 本文将解释我们的方法和实现
  • 马斯克强制员工重返办公室:每周至少40小时,不然就走人

    据称特斯拉公司首席执行官埃隆 马斯克给该司员工发了一封电子邮件 要求他们要么回来到岗上班 要么离开公司 目前这封邮件被流传出来 引起了不少人的热议 网传邮件截图如下 或许是第一封邮件未能表达出全部讯息 马斯克很快又追加了第二封内部邮件 除了
  • 指定GPU运行python程序

    一 命令行运行python程序时 1 首先查看哪些GPU空闲 nvidia smi显示当前GPU使用情况 nvidia smi 2 然后指定空闲的GPU运行python程序 CUDA VISIBLE DEVICES 0 2 3 python
  • Python Intro - ipdb debug install

    1 build and install setuptools 1 1 download setuptools setuptools 15 0 tar gz 1 2 unzip setuptools tar xf setuptools 15
  • DFX分析 包括DFM等

    DFX 面向产品生命周期各个环节的设计 可制造 可装配 可靠性 可服务 可测试等等 DFX基于并行设计的思想 在产品的概念设计和详细设计阶段就综合考虑到制造过程中的工艺要求 测试要求和组装合理性 同时还考虑到维修要求 售后服务要求和可靠性要
  • 快手小铃铛跳转微信扫描技术多少钱教学

    快手小铃铛跳转微信扫描技术多少钱教学 快手小铃铛 快手小铃铛跳转微信 小铃铛跳转微信 宝贝 平台上的变现方案你都有参加吗 光合计划手气福袋拉新活动 我以前都跟大家分享了一下 今天介绍一下磁力精英小铃铛的变现 这也是一项大的变现 点来看 这是
  • /sys/module 模块信息与 /proc/modules

    看到一篇关于 proc moduels 以及 sys module 相关介绍 转载一下 http linux chinaunix net techdoc system 2008 07 18 1018163 shtml 在编译模块的时候 如果
  • 浅析如何设计一个亿级网关

    1 背景 1 1 什么是API网关 API网关可以看做系统与外界联通的入口 我们可以在网关进行处理一些非业务逻辑的逻辑 比如权限验证 监控 缓存 请求路由等等 1 2 为什么需要API网关 RPC协议转成HTTP 由于在内部开发中我们都是以
  • letax报错“ I can't write on file `***.pdf”

    问题 运行时代码报错 原因 是我打开了生成的所生成的pdf文档了 关闭文档和其所在的文件夹 重新运行 一切正常
  • 【软考-中级】系统集成项目管理工程师【总】

    网站 https bm ruankao org cn sign welcome 持续更新中 学习目标 完成2023上半年 软件中考任务 目标23年5月 考试前 完成 相关知识点学习 和练习 核心 十五至尊图 上面图是考试的核心 需要背下来
  • 眼保健操(UPWND公益版)保护眼睛

    眼保健操 UPWND公益版 新版六节眼保健操 请跟随音乐口令节奏做操 每节均有具体图文示范 网络时代 专家建议每使用电脑1小时 请休息5分钟 共分六节 第一节 按揉攒竹穴 第二节 按压睛明穴 第三节 按揉四白穴 第四节 按揉太阳穴 刮上眼眶
  • 浅谈RAID写惩罚(Write Penalty)与解决方案闪存荷尔蒙(FlashHormone)

    浅谈RAID写惩罚 Write Penalty 与解决方案闪存荷尔蒙 FlashHormone 介绍 通常在讨论不同RAID保护类型的性能的时候 结论都会是RAID 1提供比较好的读写性能 RAID 5读性能不错 但是写入性能就不如RAID
  • 一文了解 Python 中的生成器

    前言 生成器很容易实现 但却不容易理解 生成器也可用于创建迭代器 但生成器可以用于一次返回一个可迭代的集合中一个元素 现在来看一个例子 def yrange n i 0 while i lt n yield i i 1 每次执行 yield
  • 力扣刷题笔记 数组能形成多少数对

    代码如下 from collections import defaultdict class Solution def numberOfPairs self nums List int gt List int a defaultdict i
  • caffe-include caffe/caffe/hpp 出错

    文章目录 include include
  • C# 操作JSON的几种方式

    关于Json数据在开发中的重要性 自然不言而喻 本篇通过两种在c 中常用的方式来实现对Json数据的序列化和反序列化 为了实现大多数的需求 我们采用稍微复杂一点的数据模型 首先我们有以下json数据 name 张三 age 20 idCar