zoukankan      html  css  js  c++  java
  • c# json 序列化如何去掉null值

    要将一个对象序列化,可是如果对象的属性为null的时候,我们想将属性为null的都去掉。

    在这里我使用Newtonsoft.Json.dll

    记录一下序列化以及反序列化

    json字符串转对象

    Model model=JsonConvert.DeserializeObject<Model>(val);

    将对象转化为json格式字符串

    string jsonString = JsonConvert.SerializeObject(obj);

    那么如何序列化为json时过滤掉NULL呢??

    var jsonSetting = new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore};
    
    var json = JsonConvert.SerializeObject(data, Formatting.Indented, jsonSetting);

    直接这样JsonConvert.SerializeObject(obj);序列化结果

    复制代码
    "MemberQuery": {
          "PhoneNumber": "13222222222",
          "Name": "test",
          "MF": "女",
          "BirthDate": "01/01/2017",
          "MaritalStatus": null,
          "Country": null
    }
    复制代码

    过滤掉NULL序列化结果:

    复制代码
    "MemberQuery": {
        "PhoneNumber": "13222222222",
        "Name": "test",
        "MF": "女",
        "BirthDate": "01/01/2017"
    }
    复制代码

    以前需要将一段json字符串转换为C#对象时,一般都是定义一个与之对应的实体类来接收。这样做有一个很大的缺点,就是当字符串特别长,属性特别多,又有嵌套时,手敲这个实体类就非常痛苦。

    比如之前做的一个接收百度七天天气预报的API,层层嵌套,很痛苦。

    C# 4.0 之后有了动态类型dynamic。用这个东西配合Json.net可以实现不用定义实体类的json转dynamic类型对象。

    以下示例需要先引用Newtonsoft.Json.dll

    复制代码
    复制代码
    public class Person {
        public int Id { get; set; }
        public string Name { get; set; }
    } 
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            p.Id = 1;
            p.Name = "刘备";
            //C#对象转Json
            string json = JsonConvert.SerializeObject(p);
            Console.WriteLine(json);    //{"Id":1,"Name":"刘备"}
             
            //此处模拟在不建实体类的情况下,反转将json返回dynamic对象
            var DynamicObject = JsonConvert.DeserializeObject<dynamic>(json);
            Console.WriteLine(DynamicObject.Name);  //刘备
            Console.ReadKey();
        }
    }
    复制代码
    复制代码

    以上只是借用了一个实体类来获得一个简单的JSON对象。

    实际上,可以完全没有这个Person类。

    复制代码
    复制代码
    static void Main(string[] args)
    {
        string json = "{"Id":1,"Name":"刘备","Age":"22"}";
        //此处模拟在不建实体类的情况下,反转将json返回回dynamic对象
        var DynamicObject = JsonConvert.DeserializeObject<dynamic>(json);
        Console.WriteLine(DynamicObject.Name);  //刘备
        Console.ReadKey();
    }
    复制代码
    复制代码

    如果未引用Microsoft.CSharp.dll,关于动态类型,VS可能会报错。

    VS 可以回编译报错:找不到编译动态表达式所需的一个或多个类型。是否缺少引用?

  • 相关阅读:
    delphi 中的异常处理结构
    delphi 获取系统临时文件夹路径
    delphi 之选择文件夹/目录路径的函数SelectDirectory
    delphi DevExpress 系列控件的一点感悟
    delphi 之DevExpress 汉化方法:
    SqlServer 查询表中字段的字段说明:
    delphi数据类型之句柄类型
    Delphi中之PChar, PWideChar, pAnsiChar三种数据类型的一点感悟
    求数值型数组中元素的最大值、最小值、平均值、总和等。
    杨辉三角的实现
  • 原文地址:https://www.cnblogs.com/Alex80/p/9758561.html
Copyright © 2011-2022 走看看