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 小时前
96.如何使用C#实现串口发送? C#例子
开发语言·c#
不爱写代码的玉子6 小时前
HALCON透视矩阵
人工智能·深度学习·线性代数·算法·计算机视觉·矩阵·c#
开开心心就好9 小时前
高效Excel合并拆分软件
开发语言·javascript·c#·ocr·排序算法·excel·最小二乘法
一名用户10 小时前
unity实现自定义粒子系统
c#·unity3d·游戏开发
钢铁男儿12 小时前
C# 类和继承(扩展方法)
java·servlet·c#
爱炸薯条的小朋友13 小时前
C#由于获取WPF窗口名称造成的异常报错问题
windows·c#·wpf
Rose 使者15 小时前
全球IP归属地查询接口如何用C#进行调用?
c#·api·ip地址
~plus~16 小时前
Harmony核心:动态方法修补与.NET游戏Mod开发
开发语言·jvm·经验分享·后端·程序人生·c#
htj1017 小时前
C# 使用正则表达式
正则表达式·c#
~plus~17 小时前
WPF八大法则:告别模态窗口卡顿
开发语言·经验分享·后端·程序人生·c#