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

c#:System.Text.Json 的使用四(如何忽略[JsonPropertyName])

环境:

  • .net 6.0
  • vs2022

系列篇:
《c#:System.Text.Json 的使用一》
《c#:System.Text.Json 的使用二》
《c#:System.Text.Json 的使用三(从Newtonsoft迁移)》
《c#:System.Text.Json 的使用四(如何忽略[JsonPropertyName])》

参考:
《C# 序列化Json时如何忽略JsonProperty(PropertyName =“ someName”)》
《自定义 JSON 协定》

1. System.Text.Json

using System.Text.Json.Serialization.Metadata;
using System.Text.Json.Serialization;
using System.Text.Json;
using System.Reflection;//默认输出: {"kname":"jack"}
//var jsonDefault = JsonSerializer.Serialize(new Person { Name = "jack" });//使用 Modifiers 达到期望, 输出: {"Name":"jack"}
var json = JsonSerializer.Serialize(new Person { Name = "jack" }, new JsonSerializerOptions
{TypeInfoResolver = new DefaultJsonTypeInfoResolver{Modifiers = { (typeInfo) =>{for (int i = 0; i < typeInfo.Properties.Count; i++){var property = typeInfo.Properties[i];var prop = property.AttributeProvider as PropertyInfo;if (prop != null) property.Name = prop.Name;}}}}
});public class Person
{[JsonPropertyName("kname")]public string Name { get; set; }
}

2. NewtonSoft

using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;//默认输出: {"kname":"jack"}
//var jsonDefault = JsonConvert.SerializeObject(new Person { Name = "jack" });//使用 ContractResolver 达到期望, 输出: {"Name":"jack"}
var settings = new JsonSerializerSettings();
settings.ContractResolver = new LongNameContractResolver();
var json = JsonConvert.SerializeObject(new Person { Name = "jack" }, settings);public class Person
{[JsonProperty("kname")]public string Name { get; set; }
}public class LongNameContractResolver : DefaultContractResolver
{protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization){IList<JsonProperty> list = base.CreateProperties(type, memberSerialization);foreach (JsonProperty prop in list){prop.PropertyName = prop.UnderlyingName;}return list;}
}
http://www.lryc.cn/news/442797.html

相关文章:

  • 【CPU】CPU的物理核、逻辑核、超线程判断及L1、L2、L3缓存、CacheLine和CPU的TBL说明
  • NET WPF使用组件库HandyControl
  • 计算机毕业设计之:教学平台微信小程序(
  • VMware Fusion虚拟机Mac版 安装Win10系统教程
  • 头戴式蓝牙耳机性价比高的有哪些?四款高能性价比机型对比推荐
  • Linux:make,Makefile
  • 基于代理的分布式身份管理方案
  • VSCode开发ros程序无法智能提示的解决方法(一)
  • grep命令如何实现正则表达式搜索?
  • Vue报错 ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件
  • emqx代理订阅主题的方法
  • 页面关键路径渲染详解
  • 错题集锦之C语言
  • 【2024华为杯数学建模竞赛】E题 解题思路 | 视频特征提取
  • ubuntu 执行定时任务crontab -e 无法输入的问题
  • 快速响应:提升前端页面加载速度技巧的必知策略方案
  • VUE-CLI配置全局SCSS变量
  • 前端JavaScript导出excel,并用excel分析数据,使用SheetJS导出excel
  • 浅谈内网攻防之道-内网系统凭证钓鱼
  • fmql之ubuntu联网
  • 掌握AI创作神器:10分钟搞定ComfyUI和Flux大模型
  • React js Router 路由 2, (把写过的几个 app 组合起来)
  • Linux基础3-基础工具2(vim详解,gcc详解)
  • GEE教程:利用sentinel-2数据进行ndwi和ndci指数的计算和下载
  • markdown-it:将Markdown文本转换为HTML格式,展示在页面,怎么自定义里面的a标签设置为在新标签页打开
  • linux在工作中常用命令
  • 828华为云征文|部署知识库问答系统 MaxKB
  • 数据结构之算法复杂度
  • Python用TOPSIS熵权法重构粮食系统及期刊指标权重多属性决策MCDM研究|附数据代码...
  • 【例题】lanqiao4403 希尔排序模板题