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

csharp 复制代码
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

csharp 复制代码
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;
    }
}
相关推荐
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕4 天前
JSONObject与JSONArray封装数据格式区别
java·json
神仙别闹4 天前
基于C#+MySQL实现(WinForm)个人聊天室软件
c#
A黄俊辉A4 天前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
kybs19914 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
伞伞悦读4 天前
【第37期】Python JSON 与配置详解:序列化、反序列化、嵌套结构和配置文件
开发语言·python·json
Mikko74 天前
jackson-databind 升到 2.21.6 就安全了吗?jackson-core 是另一个坐标,它那条 high 全局库至今没收
java·后端·安全·json
Polevne4 天前
C# SFTP客户端实现文件传输
c#·ssh
samble4 天前
从零搭建灌装监控系统(四):深色主题与样式系统,ResourceDictionary 统一管理
c#·wpf·mvvm·样式·工业控制
cjp5604 天前
024 . WPF MVVM类封装优化
c#