当前位置 博文首页 > 三十三重天:Newtonsoft.Json的使用整理

    三十三重天:Newtonsoft.Json的使用整理

    作者:三十三重天 时间:2021-05-12 18:18

    关于我

    我的博客 | 欢迎关注

    引言

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

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

    bk