Newtonsoft.Json的使用整理
关于我
引言
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的视频学习资源
公众号后台回复:“技能图谱”,送你一份最全的开发者技能图谱
最新文章
- POJ2104 K-th Number[主席树]【学习笔记】
- angular中的代码执行顺序和$scope.$digest();
- python学习笔记三 深浅copy,扩展数据类型(基础篇)
- DOS批处理命令-if语句
- grunt学习
- WPF DataGridHyperlinkColumn
- Ibatis动态(dynamic)查询
- RHEL 6.9 udev 将lv绑定raw devices
- 目录树生成工具treer
- Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
- python中的None
- ue4 socket
- 测试教程网.unittest教程.2. 基本用法
- 20155205 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
- 判断URL文件是不是在于在。
- 关于Struts2的文件下载
- POJ 3356 水LCS
- webpack构建Vue项目引入jQ时发生“&#39;$&#39; is defined but never used”的处理
- 课堂实验-String类和Arrays类
- 【CodeForces】889 B. Restoration of string
热门文章
- Html5分页显示Table
- 攻防世界 reverse easy_Maze
- PTA 二叉树的三种遍历(先序、中序和后序)
- 微信小程序实现搜索关键词高亮
- vue 快速入门 系列 —— vue 的基础应用(上)
- java面试-死锁产生、定位分析和修复
- 5. linux 中“~”,“/”,“#”,”$“ 含义
- Team Queue UVA - 540
- Mediapipe 在RK3399PRO上的初探(二)(自定义Calculator)
- 05.ElementUI源码学习:项目发布配置(github pages&;npm package)