Newtonsoft.Json的使用整理

happlyfox
• 阅读 1399

关于我

我的博客 | 欢迎关注

引言

json是我们在工作中经常用到的一种数据传输格式,开始过程中解析json是我们经常面对的问题。NewtonsoftJson是c#的一套json处理封装类,它可以高效,方便地帮助我们处理json。

NetonSoftJson提供了完整的使用文档,文档地址如下:Json.NET Documentation

NetonSoftJson的不同使用场景

常用方法 序列化和反序列化

这应该是我们最常用的俩个方法了

JsonConvert.DeserializeObject<T>(string json)//反序列化
JsonConvert.SerializeObject(object obj) //序列化

高级特性

参考文章 Newtonsoft.Json高级用法

某些字段不想被反序列化

使用JsonIgnore特性标签

public class Person
{
    public int Age { get; set; }

    public string Name { get; set; }

    [JsonIgnore]
    public string Sex { get; set; }
}

自定义序列化名称

public class Person
{
    public int Age { get; set; }

    public string Name { get; set; }

    [JsonProperty(PropertyName = "SepcialSex")]
    public string Sex { get; set; }
}

解析字面量字符串

首先构建一个json对象,描述了一个老师的实体,里面包含老师的基本属性(名称、年龄),所管理的班级属性,所管理的班级的学生数组

{
  "name": "张三",
  "age": "10",
  "classroom": {
    "name": "1年级1班",
    "desc": "描述"
  },
  "students": [
    {
      "age": "小名"
    },
    {
      "age": "小红"
    }
  ]
}

接下来我们使用Newtonsoftjson解析字符串并获取到我们需要的信息

string jsonStr = "{\"name\":\"张三\",\"age\":\"10\",\"classroom\":{\"name\":\"1年级1班\",\"desc\":\"描述\"},\"students\":[{\"name\":\"小名\"},{\"name\":\"小红\"}]}";
JObject jObject = JObject.Parse(jsonStr);

获取姓名

Console.WriteLine("name is " + jObject["name"].ToString());
Console.WriteLine("age is " + jObject.GetValue("age").ToString());

获取班级信息

Console.WriteLine("classroom name is " + jObject["classroom"]["name"]);

获取学生信息

JArray jArray = JArray.Parse(jObject["students"].ToString());
foreach (var arr in jArray)
{
    JObject jObj = JObject.Parse(arr.ToString());
    string name = jObj["name"].ToString();
    Console.WriteLine("student name  is " + name);
}

判断key是否存在

//key 不存在
if (jObject.Property("abc") != null)
{
    Console.WriteLine(jObject.Property("abc").Value.ToString());
}
else
{
    Console.WriteLine("当前key不存在");
}

WebApi下的应用

项目开发中不管是前台还是后台都会遇到烦人的null,数据库表中字段允许空值,则代码实体类中对应的字段类型为可空类型Nullable<>,如int?,DateTime?,null值字段序列化返回的值都为null,前台对应字段赋值需要做null值判断,怎么才能全局把null替换为空。

.NET Core 处理 WebAPI JSON 返回烦人的null为空

总结

Json的使用远不止于此,作者只是针对自己到现在为止工作中常见的问题进行一个整理,后续也会慢慢补充新的内容,将文章不断地更新优化。

The END

本文到此结束,希望对你有帮助 😃

更多精彩 技术文章汇总在我的 公众号程序员工具集 ,持续更新,欢迎关注订阅收藏。

如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

福利姬

公众号后台回复:“关注礼包”,获取价值5K的视频学习资源

公众号后台回复:“技能图谱”,送你一份最全的开发者技能图谱

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
2年前
C# JToken类的使用,实现解析动态json数据、遍历、查找
在原来解析json数据是,一般都是用反序列化来实现json数据的解读,这需要首先知道json数据的结构并且建立相应的类才能反序列化,一旦遇到动态的json数据,这种方法就不使用。为了解决动态解析json数据,微软有个Newtonsoft.Json封装类十分好用,里面的JToken直接实现ling查询。将json字符串解析为JToken,
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Fastjson API Stream使用说明
FastjsonAPIStreamFastjson当需要处理超大JSON文本时,需要StreamAPI,在fastjson1.1.32版本中开始提供StreamAPI。如何序列化超大JSON数组序列化如果你的JSON格式是一个巨大的JSON数组,有很多元素,
Stella981 Stella981
2年前
AspNetCore Json序列化设置
AspNetCore中的Json序列化处理已经默认使用_Newtonsoft.Json_库了...比如像MVC中:publicI不过使用过程中会发现一些问题,其实这算默认设置吧:Json序列化后的字段格式会变成小驼峰形式Json序列化时的日期时间格式化没有处理循环引用的问题,比如EntityF
Stella981 Stella981
2年前
Gson之实例五
前面四篇博客基本上可以满足我们处理的绝大多数需求,但有时项目中对json有特殊的格式规定.比如下面的json串解析:{"tableName":"students","tableData":{"id":1,"name":"李坤","birthDay":"Jun 22, 2012 9:54:49 PM"},{"id":2,"name":"曹贵生"
Stella981 Stella981
2年前
FastJson 反序列化注意事项
问题描述使用fastJson对json字符串进行反序列化时,有几个点需要注意一下:反序列化内部类反序列化模板类0\.Getter/Setter问题如我们希望返回的一个json串为"name":"name","isDeleted":true,"isEmpty":1
Wesley13 Wesley13
2年前
unity将 -u4E00 这种 编码 转汉字 方法
 unity中直接使用 JsonMapper.ToJson(对象),取到的字符串,里面汉字可能是\\u4E00类似这种其实也不用转,服务器会通过类似fastjson发序列化的方式,将json转对象,获取对象的值就是中文但是有时服务器要求将传参中字符串中类似\\u4E00这种转汉字,就需要下面 publ
京东云开发者 京东云开发者
6个月前
jq工具及其常用用法 | 京东物流技术团队
近来在工作中处理JSON处理较多,深入研究了一下jq,之前对jq的使用一直停留在JSON数据格式化的层面,实际它的能力远不止于此。在处理JSON数据时,我们经常需要在命令行中进行过滤、查询和编辑的操作。jq是一个强大的命令行JSON处理工具,它可以让我们轻