Newtonsoft.Json的使用整理

Posted happlyfox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

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

以上是关于Newtonsoft.Json的使用整理的主要内容,如果未能解决你的问题,请参考以下文章

Newtonsoft.Json的使用整理

Asp.Net Core中Json序列化处理整理

.Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json反序列化json示例教程

C# Newtonsoft.Json JsonSerializerSettings配置

将 Newtonsoft.Json 代码迁移到 System.Text.Json

如何使用 Newtonsoft.JSON 解析 JSON 响应? [复制]