关于我

我的博客 | 欢迎关注

引言

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的视频学习资源

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

最新文章

  1. POJ2104 K-th Number[主席树]【学习笔记】
  2. angular中的代码执行顺序和$scope.$digest();
  3. python学习笔记三 深浅copy,扩展数据类型(基础篇)
  4. DOS批处理命令-if语句
  5. grunt学习
  6. WPF DataGridHyperlinkColumn
  7. Ibatis动态(dynamic)查询
  8. RHEL 6.9 udev 将lv绑定raw devices
  9. 目录树生成工具treer
  10. Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
  11. python中的None
  12. ue4 socket
  13. 测试教程网.unittest教程.2. 基本用法
  14. 20155205 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
  15. 判断URL文件是不是在于在。
  16. 关于Struts2的文件下载
  17. POJ 3356 水LCS
  18. webpack构建Vue项目引入jQ时发生“&#39;$&#39; is defined but never used”的处理
  19. 课堂实验-String类和Arrays类
  20. 【CodeForces】889 B. Restoration of string

热门文章

  1. Html5分页显示Table
  2. 攻防世界 reverse easy_Maze
  3. PTA 二叉树的三种遍历(先序、中序和后序)
  4. 微信小程序实现搜索关键词高亮
  5. vue 快速入门 系列 —— vue 的基础应用(上)
  6. java面试-死锁产生、定位分析和修复
  7. 5. linux 中“~”,“/”,“#”,”$“ 含义
  8. Team Queue UVA - 540
  9. Mediapipe 在RK3399PRO上的初探(二)(自定义Calculator)
  10. 05.ElementUI源码学习:项目发布配置(github pages&amp;npm package)