当前位置: 首页 > 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。

相关文章:

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

Newtonsoft.Json 是一个流行的 JSON 操作库&#xff0c;用于在 .NET 应用程序中序列化、反序列化和操作 JSON 数据。下面是 Newtonsoft.Json 常用的一些方法&#xff1a; 序列化对象为 JSON 字符串&#xff1a; string json JsonConvert.SerializeObject(obj);var obj new {…...

力扣刷题-二叉树-二叉树的高度与深度

二叉树最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 递归法 本题可以使用前序&#xff08;中左…...

Vue3新增加的css语法糖

一、deep <template><div class""><el-input /> </div> </template> <style scoped> /* 样式穿透 */ :deep input {background: red; } </style> 二、slotted 子组件修改插槽里面的样式 <template><div clas…...

Windows安装Vmware 虚拟机

目录 一、Vmware 虚拟机介绍 二、Vmware 虚拟机的三种网络模式 2.1桥接模式 2.2仅主机模式 2.3NAT 网络地址转换模式 三、Vmware 虚拟机的安装 一、Vmware 虚拟机介绍 VMware Workstation Pro 是一款可以在个人电脑的操作系统上创建一个完全与主机操作系统隔离的 虚拟机&…...

uniapp地图手动控制地图scale

前言 首次使用uniapp开发地图过程中&#xff0c;发现uniapp地图居然没有提供手动控制地图scale的方法&#xff0c;这个也着实没有想到&#xff0c;查了半天资料&#xff0c;也终于找到一个方法能够比较好的控制scale&#xff0c;做个记录。 代码 要定义一个地图map&#xff…...

Kotlin学习之函数

原文链接 Understanding Kotlin Functions 函数对于编程语言来说是极其重要的一个组成部分&#xff0c;函数可以视为是程序的执行&#xff0c;是真正活的代码&#xff0c;为啥呢&#xff1f;因为运行的时候你必须要执行一个函数&#xff0c;一般从主函数入口&#xff0c;开始一…...

若依启动步骤

1.创建数据库 2.启动redis 3.改后端的数据库连接配置 4.配置redis redis的地址&#xff1a;cmd中ipconfig命令查看 6.启动后端&#xff1a;如下 7.启动前端ruoyi-ui中 先运行npm install&#xff0c;再npm run dev。项目就启动成功了。 用户名&#xff1a;admin 密码&#x…...

qt-C++笔记之两个窗口ui的交互

qt-C笔记之两个窗口ui的交互 code review! 文章目录 qt-C笔记之两个窗口ui的交互0.运行1.文件结构2.先创建widget项目&#xff0c;搞一个窗口ui出来3.项目添加第二个widget窗口出来4.补充代码4.1.qt_widget_interaction.pro4.2.main.cpp4.3.widget.h4.4.widget.cpp4.5.second…...

Redis-核心数据结构

五种数据结构 String结构 String结构应用场景 Hash结构 Hash结构应用场景 List结构 List结构应用场景 Set结构 Set结构应用场景 ZSet有序结构 ZSet有序结构应用场景...

设计模式—结构型模式之外观模式(门面模式)

设计模式—结构型模式之外观模式&#xff08;门面模式&#xff09; 外观&#xff08;Facade&#xff09;模式又叫作门面模式&#xff0c;是一种通过为多个复杂的子系统提供一个一致的接口&#xff0c;而使这些子系统更加容易被访问的模式。 例子 我们的电脑会有很多 组件&am…...

CentOS Stream 9-使用 systemd 管理自己程序时自定义日志路径

systemd 文件 [rootnode1 ~]# cat /etc/systemd/system/spms-wvp.service [Unit] DescriptionWVP service [Service] # 关键配置部分,注意这里的 spms-wvp &#xff0c;后面需要用 SyslogIdentifierspms-wvp StandardOutputsyslog StandardErrorsyslog Typesimple Environment…...

动态页面调研及设计方案

文章目录 vue2 动态表单、动态页面调研一、form-generator二、ng-form-element三、Variant Form四、form-create vue2 动态表单、动态页面调研 一、form-generator 预览&#xff1a;https://mrhj.gitee.io/form-generator/#/ Vue2 Element UI支持拖拽生成表单不支持其他组件…...

鸿蒙4.0开发笔记之DevEco Studio之配置代码片段快速生成(三)

一、作用 配置代码片段可以让我们在Deveco Studio中进行开发时快速调取常用的代码块、字符串或者某段具有特殊含义的文字。其实现方式类似于调用定义好变量&#xff0c;然而这个变量是存在于Deveco Studio中的&#xff0c;并不会占用项目的资源。 二、配置代码段的方法 1、打…...

HarmonyOS真机调试报错:INSTALL_PARSE_FAILED_USESDK_ERROR处理

文章目录 1、 新建应用时选择与自己真机匹配的sdk版本2、 根据报错提示连接打开处理方案3、查询真机版本对应的**compileSdkVersion** 和 **compatibleSdkVersion** 提示3.1版本之后和3.1版本之前的不同命令&#xff08;此处为3.0版本&#xff09;4、根据查询修改参数5、连接成…...

webSocket基于面向对象二次封装

今天不睡,熬夜赶了个WebSocket 二次封装,也对这几天文章摸鱼感到抱歉,所以我出了一个注释非常非常全的代码 思路如下 首先&#xff0c;需要通过调用connect方法来建立WebSocket连接。当连接成功时&#xff0c;会调用我提供的回调函数&#xff0c;并将连接成功的消息帧作为参数…...

【Web】PHP反序列化的一些trick

目录 ①__wakeup绕过 ②加号绕过正则匹配 ③引用绕过相等 ④16进制绕过关键词过滤 ⑤Exception绕过 ⑥字符串逃逸 要中期考试乐(悲) ①__wakeup绕过 反序列化字符串中表示属性数量的值 大于 大括号内实际属性的数量时&#xff0c;wakeup方法会被绕过 &#xff08;php5-p…...

【测试功能篇 01】Jmeter 压测接口最大并发量、吞吐量、TPS

压力测试&#xff0c;我们针对比较关键的接口&#xff0c;可以进行相应的压力测试&#xff0c;主要还是测试看看接口能抗住多少的请求数&#xff0c;TPS稳定在多少&#xff0c;也就是吞吐量多少 安装 Jmeter的安装很简单&#xff0c;官网下载地址 http://jmeter.apache.org/ &…...

代码随想录算法训练营第四十九天| 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;代码随想录B站账号 状态&#xff1a;看了视频题解和文章解析后做出来了 123.买卖股票的最佳时机III class Solution:def maxProfit(self, prices: List[int]) -> int:if len(prices) 0:return 0dp [[0] * 5 for _ in…...

11.20 知识总结(choices参数、MVC和MTV的模式、Django与Ajax技术)

一、 choices参数的使用 1.1 作用 针对某个可以列举完全的可能性字段&#xff0c;我们应该如何存储 .只要某个字段的可能性是可以列举完全的&#xff0c;那么一般情况下都会采用choices参数 1.2 应用场景 应用场景&#xff1a; 学历&#xff1a; 小学 初中 高中 本科 硕士…...

深度学习二维码识别 计算机竞赛

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天…...

教育资源解析工具:打通国家中小学智慧教育平台电子课本获取通道

教育资源解析工具&#xff1a;打通国家中小学智慧教育平台电子课本获取通道 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具&#xff0c;帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff0c;让您更方便地获取课本内容。 …...

机器学习 01高斯混合模型(Gaussian Mixture Model:GMM)_基础知识与认识

公式&#xff1a; 应用&#xff1a;高斯混合模型本质是用多个高斯分布叠加&#xff0c;去拟合任意复杂的数据分布&#xff0c;常用来做聚类、密度估计、数据生成、异常检测等&#xff1a; 第一步&#xff1a;基本认识“高斯模型”&#xff1a;从“一个高斯”开始 什么是高斯分…...

98. 未使用的机器配置(rke-machine-config.cattle.io)在 Rancher v2.10+ 中会自动清理

Environment 环境 SUSE Rancher Prime v2.10.x till v2.11.x SUSE Rancher Prime v2.10.x 到 v2.11.xRKE2VMware vSphereAWS EC2 Situation 地理位置After upgrading to Rancher v2.10, VmwarevsphereConfigs created via Terraform (rancher2_machine_config_v2) are automa…...

MGeo中文地址解析模型入门指南:地址要素边界识别难点与MOMETAS多任务缓解策略

MGeo中文地址解析模型入门指南&#xff1a;地址要素边界识别难点与MOMETAS多任务缓解策略 地址&#xff0c;这个我们日常生活中再熟悉不过的信息&#xff0c;背后却隐藏着巨大的技术挑战。你有没有想过&#xff0c;当你在地图App里输入“北京市海淀区中关村大街27号”&#xf…...

串口通信与Modbus协议:工业自动化中的黄金搭档

1. 工业自动化的通信基石&#xff1a;串口与Modbus为何成为黄金组合 在工厂车间的控制柜里&#xff0c;PLC正以每秒数十次的频率采集着温度传感器的数据&#xff1b;在自动化生产线上&#xff0c;机械臂的每个动作都精准同步着传送带的节奏。这些看似神奇的工业魔法&#xff0c…...

Qwen All-in-One场景解析:如何用轻量模型赋能边缘计算应用

Qwen All-in-One场景解析&#xff1a;如何用轻量模型赋能边缘计算应用 1. 引言&#xff1a;当边缘计算遇上大模型 想象一下&#xff0c;在一个智能工厂的质检工位上&#xff0c;摄像头捕捉到产品表面的微小瑕疵。传统的做法是&#xff1a;将图像上传到云端服务器&#xff0c;…...

Pixel Script Temple 企业知识库图解:将文档内容自动转化为像素示意图

Pixel Script Temple 企业知识库图解&#xff1a;将文档内容自动转化为像素示意图 1. 企业知识管理的痛点与机遇 技术文档和操作手册是企业知识管理的重要组成部分&#xff0c;但传统文档形式存在明显的可读性问题。密密麻麻的文字说明、复杂的流程图和晦涩的专业术语&#x…...

重新定义交通安全研究范式:基于无人机轨迹数据的数字孪生解决方案

重新定义交通安全研究范式&#xff1a;基于无人机轨迹数据的数字孪生解决方案 【免费下载链接】UCF-SST-CitySim1-Dataset 项目地址: https://gitcode.com/gh_mirrors/ucf/UCF-SST-CitySim-Dataset 在自动驾驶技术快速发展的今天&#xff0c;传统交通安全研究面临着一个…...

Qwen3-Embedding-4B应用分享:打造智能法律合同检索系统,快速找到关键条款

Qwen3-Embedding-4B应用分享&#xff1a;打造智能法律合同检索系统&#xff0c;快速找到关键条款 1. 引言&#xff1a;法律合同检索的痛点与解决方案 在法律实务工作中&#xff0c;合同审查是一项耗时且关键的任务。律师和法务人员经常需要从数百页的合同中快速定位特定条款&…...

从‘torch not found’到成功训练:一个YOLOv8环境配置的完整避坑实录(含CUDA/cuDNN版本选择)

YOLOv8环境配置终极指南&#xff1a;从版本匹配到显存优化的全流程实战 在计算机视觉领域&#xff0c;YOLOv8作为目标检测的标杆算法&#xff0c;其安装配置过程却常常成为开发者的"拦路虎"。本文将带你系统解决从PyTorch版本选择、CUDA环境配置到显存优化的全链路问…...