当前位置: 首页 > news >正文

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

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

序列化对象为 JSON 字符串:

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

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

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

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

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

 忽略对象中的null值属性:

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

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

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

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

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

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

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

class Person
{public string Name { get; set; }public int Age { get; set; } // 不使用可空类型
}string json1 = "{\"Name\":\"John\",\"Age\":30}";
Person obj1 = JsonConvert.DeserializeObject<Person>(json1);
Console.WriteLine(obj1.Name); // 输出:John
Console.WriteLine(obj1.Age); // 输出:30

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

class Person
{public string Name { get; set; }public int Age { get; set; } // 不使用可空类型
}string json2 = "{\"Name\":\"John\"}";
Person obj2 = JsonConvert.DeserializeObject<Person>(json2);
Console.WriteLine(obj2.Name); // 输出:John
Console.WriteLine(obj2.Age); // 输出:0(默认值)

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

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

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

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

class Person
{public string Name { get; set; }public int? Age { get; set; } // 使用可空类型
}string json3 = "{\"Name\":\"John\"}";
Person obj3 = JsonConvert.DeserializeObject<Person>(json3);
Console.WriteLine(obj3.Name); // 输出:John
Console.WriteLine(obj3.Age); // 输出:null

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

http://www.lryc.cn/news/237168.html

相关文章:

  • 力扣刷题-二叉树-二叉树的高度与深度
  • Vue3新增加的css语法糖
  • Windows安装Vmware 虚拟机
  • uniapp地图手动控制地图scale
  • Kotlin学习之函数
  • 若依启动步骤
  • qt-C++笔记之两个窗口ui的交互
  • Redis-核心数据结构
  • 设计模式—结构型模式之外观模式(门面模式)
  • CentOS Stream 9-使用 systemd 管理自己程序时自定义日志路径
  • 动态页面调研及设计方案
  • 鸿蒙4.0开发笔记之DevEco Studio之配置代码片段快速生成(三)
  • HarmonyOS真机调试报错:INSTALL_PARSE_FAILED_USESDK_ERROR处理
  • webSocket基于面向对象二次封装
  • 【Web】PHP反序列化的一些trick
  • 【测试功能篇 01】Jmeter 压测接口最大并发量、吞吐量、TPS
  • 代码随想录算法训练营第四十九天| 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV
  • 11.20 知识总结(choices参数、MVC和MTV的模式、Django与Ajax技术)
  • 深度学习二维码识别 计算机竞赛
  • C#关于TimeSpan结构的使用和获取两个时间差
  • Git分支管理
  • 《视觉SLAM十四讲》-- 建图
  • 智能配电箱柜管理系统
  • 聊聊近些年 CPU 在微架构、IO 速率上的演进过程
  • PS学习笔记——移动工具
  • 信息中心网络提出的背景、研究现状及研究内容
  • 【计算机视觉】24-Object Detection
  • 【mac 解决eclipse意外退出】
  • mysql innodb buffer pool缓冲池命中率和命中了哪些表?—— 筑梦之路
  • 牛掰的dd命令,cpi0配合find备份(不会主动备份),od查看