首页 > 其他分享 >JsonConvert中处理Null值问题

JsonConvert中处理Null值问题

时间:2024-08-08 09:40:36浏览次数:5  
标签:obj 处理 propertyName JsonConvert NullToEmptyStringConverter new Null public

1.定义一个类 NullToEmptyStringConverter  继承 JsonConverter

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;

public class NullToEmptyStringConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return true; // 可以应用于任何类型
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
{
return ""; // 将null转换为空字符串
}

JToken token = JToken.Load(reader);
return token.ToObject(objectType, serializer);
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException(); // 只实现读取逻辑
}
}

2. 第二步有两种实现 

第一种 通过在属性上添加特性

public class MyClass
{
[JsonProperty("propertyName")]
[JsonConverter(typeof(NullToEmptyStringConverter))]
public string PropertyName { get; set; }
}

 

string json = "{\"propertyName\": null}"; // JSON字符串,其中propertyName的值为null
MyClass obj = JsonConvert.DeserializeObject<MyClass>(json);
Console.WriteLine(obj.PropertyName); // 输出结果为空字符串

 

第二种  在使用 JsonConvert.DeserializeObjec 时指定一个 JsonSerializerSettings

JsonSerializerSettings settings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
Converters = new List<JsonConverter> { new NullToEmptyStringConverter() }
};

 

string json = "{\"propertyName\": null}"; // JSON字符串,其中propertyName的值为null
MyClass obj = JsonConvert.DeserializeObject<MyClass>(json,settings);
Console.WriteLine(obj.PropertyName); // 输出结果为空字符串

 

————————————————

第一种转载  讯飞星火大模型 

第二种转载  凌霄玉阶非所愿
原文链接:https://blog.csdn.net/weixin_42064877/article/details/130447975

 

标签:obj,处理,propertyName,JsonConvert,NullToEmptyStringConverter,new,Null,public
From: https://www.cnblogs.com/bunyip/p/18348313

相关文章

  • 游戏性能超越i9-14900K!锐龙7 9700X/5 9600X首发评测:这才是真正优秀的游戏处理器
    一、前言:2家走上不同道路的微处理器公司Zen5性能提升不依赖频率和功耗很难理解像Intel这样有经验的公司,会在同一个问题上跌倒2次!2000年,在1GHz频率大战中铩羽而归的Intel,抢在AMD前面推出了当时频率最高的处理器——代号“铜矿”的奔腾III1.13GHz。但这颗处理器上市之后就大面......
  • 不走弯路!应用上架的直达式处理方案
    由谁来做现场检查?APP主体是个人的,由个人常住地址所在的公安机关评估和核查;APP主体是企业的,由企业办公地址所在的公安机关评估和核查。核查哪些内容?主要现场考察下看下产品使用与代码,远程服务器,日志,打开相关的东西给他们看一下就行了。然后可能问一下有多少访问量?有多少活跃......
  • 【C语言常见函数】格式化输入与字符串处理函数汇总
    格式化输出sprintf()、printf()和fprintf()功能上有本质区别,分别用于向字符串缓冲区、终端和文件输出格式化的数据!简介printf():printf()是C标准库中的函数,用于向标准输出流(通常是终端)输出格式化数据。格式:intprintf(constchar*format,...)通过printf()函数......
  • react项目中不同宽度断点处理
    当react项目中,你需要通过判断当前屏幕宽度改变,对不同宽度断点进行不同的处理,例如,当屏幕宽度缩小至768px及以下时,需要将某一个属性值改变,或者是当屏幕宽度缩小或者放大到某一宽度时,需要调用某个方法使用window.matchMedia()监听媒体查询importReact,{useEffect}from'react'......
  • 解析rasterfileio.dll:图像处理核心组件与修复指南
    rasterfileio.dll是一个动态链接库(DynamicLinkLibrary,简称DLL)文件,通常与图像处理软件、GIS(地理信息系统)软件或CAD(计算机辅助设计)软件有关。特别是,它可能与ESRI公司的ArcGIS软件相关联,ArcGIS是一种广泛使用的GIS平台,用于地图创建、地理数据分析、地理信息系统管理和空间可视化......
  • 《剑灵》游戏崩溃弹窗“错误126:未找到dll”怎么处理?剑灵游戏闪退提示错误126未找到dll
    在《剑灵》中遇到游戏崩溃弹窗显示“错误126:未找到dll”时,可尝试这样解决。先检查游戏文件完整性,确保相关动态链接库文件未缺失,然后更新驱动程序,清理电脑垃圾,若还不行,可考虑重新安装游戏来解决这一问题。本篇将为大家带来《剑灵》游戏崩溃弹窗“错误126:未找到dll”解决方法的内......
  • 第五代英特尔® 至强® 可扩展处理器: PK8072205560、PK8072205560x00 Gold 处理器可实
    至强®可扩展处理器:第五代英特尔®至强®可扩展处理器采用内置英特尔®AIEngines,并具有与上一代相同的功率范围、软件和平台兼容性,可实现无与伦比的CPUAI性能。介绍英特尔®至强®Gold处理器英特尔®至强®Gold处理器针对要求严苛的AI、主流数据中心、多云计算......
  • 处理程序“aspx”在其模块列表中有一个错误模块“ManagedPipelineHandler”
    原文链接:https://www.cnblogs.com/mingcaoyouxin/p/3926800.html开发web项目时需要安装IIS,在安装好IIS的Windows7本上发布asp.net网站时,web程序已经映射到了本地IIS上,但运行如下错误提示“处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPip......
  • Python scipy.optimize 给出错误答案,如何处理半定正条件?
    目标是使用pythonscipy.optimize计算优化问题。假设C是给定的4维矩阵(在代码中我使用随机矩阵来表示)。优化后的变量为A0和B0,它们是二维对称矩阵。约束条件是I+A0、I-A0、I+B0、I-B0是半定正的,其中I是二维单位矩阵。目标函数为maxTr((A0⊗B0)C),其中⊗是克罗内克......
  • nextjs14 跨域该如何处理
    nextjs官方地址next.config.js和next.config.mjs他有什么区别next.config.js:使用的是CommonJS模块系统。这是Next.js默认的配置文件格式,也是大多数情况下使用的格式。使用require语法导入模块,使用module.exports导出对象。next.config.mjs:使用的是ESMod......