• c#Nettonsoft.net库常用的方法json序列化反序列化


    Newtonsoft.Json 是一个流行的 JSON 操作库,用于在 .NET 应用程序中序列化、反序列化和操作 JSON 数据。下面是 Newtonsoft.Json 常用的一些方法:

    序列化对象为 JSON 字符串:

    string json = JsonConvert.SerializeObject(obj);
    
    1. var obj = new { Name = "John", Age = 30 };
    2. string json = JsonConvert.SerializeObject(obj);
    3. // 输出结果:{"Name":"John","Age":30}

    反序列化JSON字符串为对象: 

    T obj = JsonConvert.DeserializeObject(json);
    
    1. string json = "{\"Name\":\"John\",\"Age\":30}";
    2. var obj = JsonConvert.DeserializeObject(json);
    3. // 其中 Person 类定义为:class Person { public string Name { get; set; } public int Age { get; set; } }

    将JSON对象转换成键值对集合: 

    1. JObject jObject = JObject.Parse(json);
    2. Dictionary<string, string> dictionary = jObject.ToObjectstring, string>>();
    1. var obj = new { Name = "John", Age = 30 };
    2. string json = JsonConvert.SerializeObject(obj);
    3. // 输出结果:{"Name":"John","Age":30}

     忽略对象中的null值属性:

    1. string json = JsonConvert.SerializeObject(obj, new JsonSerializerSettings
    2. {
    3. NullValueHandling = NullValueHandling.Ignore
    4. });
    1. var obj = new { Name = "John", Age = (string)null };
    2. string json = JsonConvert.SerializeObject(obj, new JsonSerializerSettings
    3. {
    4. NullValueHandling = NullValueHandling.Ignore
    5. });
    6. // 输出结果:{"Name":"John"}

    将JSON字符串转换成易读的形式:

    string formattedJson = JValue.Parse(json).ToString(Formatting.Indented);
    
    1. string json = "{\"Name\":\"John\",\"Age\":30}";
    2. string formattedJson = JValue.Parse(json).ToString(Formatting.Indented);
    3. // 输出结果:
    4. // {
    5. // "Name": "John",
    6. // "Age": 30
    7. // }

    将json对象转换成动态对象:

    1. string json = "{\"Name\":\"John\",\"Age\":30}";
    2. dynamic obj = JsonConvert.DeserializeObject(json);
    3. Console.WriteLine(obj.Name); // 输出:John
    4. Console.WriteLine(obj.Age); // 输出:30

    类中有的属性但是在JSON字符串中没有对应值需要注意的事

    情况一:JSON 中包含 "Age" 值

    1. class Person
    2. {
    3. public string Name { get; set; }
    4. public int Age { get; set; } // 不使用可空类型
    5. }
    6. string json1 = "{\"Name\":\"John\",\"Age\":30}";
    7. Person obj1 = JsonConvert.DeserializeObject(json1);
    8. Console.WriteLine(obj1.Name); // 输出:John
    9. Console.WriteLine(obj1.Age); // 输出:30

    情况二:JSON 中没有 "Age" 值

    1. class Person
    2. {
    3. public string Name { get; set; }
    4. public int Age { get; set; } // 不使用可空类型
    5. }
    6. string json2 = "{\"Name\":\"John\"}";
    7. Person obj2 = JsonConvert.DeserializeObject(json2);
    8. Console.WriteLine(obj2.Name); // 输出:John
    9. Console.WriteLine(obj2.Age); // 输出:0(默认值)

    在情况一中,当 JSON 包含 "Age" 值时,可以直接将其赋值给对象的 Age 属性。

    而在情况二中,由于 JSON 中没有 "Age" 值,反序列化后的对象会使用类型的默认值,对于 int 类型来说,默认值是 0。这可能会导致不合理的结果。

    如果希望在情况二中避免不合理的默认值,可以使用可空类型来声明 Age 属性,并将其设置为 null。这样,即使 JSON 中没有 "Age" 值,反序列化后的对象的 Age 属性会是 null

    情况三:JSON 中缺少 "Age" 键

    1. class Person
    2. {
    3. public string Name { get; set; }
    4. public int? Age { get; set; } // 使用可空类型
    5. }
    6. string json3 = "{\"Name\":\"John\"}";
    7. Person obj3 = JsonConvert.DeserializeObject(json3);
    8. Console.WriteLine(obj3.Name); // 输出:John
    9. Console.WriteLine(obj3.Age); // 输出:null

    在情况三中,由于 JSON 中缺少 "Age" 键,反序列化后的对象会使用可空类型的默认值 null,因此 Age 属性为 null。

  • 相关阅读:
    LiveGBS/LiveNVR组合实现GB35114平台端和GB35114设备端的GB35114的交互流程
    【图像检测-裂缝识别】基于计算机实现断裂裂缝识别拼接附matlab代码
    如何在Java中计算Levenshtein莱文斯坦(相似度)编辑距离 ?
    xml schema中的all元素
    [Spring笔记] SpringMVC-04-get请求与post请求发送普通参数
    中睿天下&Coremail | 2023年Q3企业邮箱安全态势观察报告
    Ceph入门到精通-存储集群ceph df 用量统计算法说明
    适用于初学者,毕业设计的5个c语言项目,代码已开源
    常用半导体器件
    华为云GaussDB(for Redis)支撑数位科技打造全新大数据引擎
  • 原文地址:https://blog.csdn.net/weixin_54498280/article/details/134441892