gpt4 book ai didi

c# - 无论如何让 JsonConvert.SerializeObject 忽略属性上的 JsonConverter 属性?

转载 作者:行者123 更新时间:2023-11-30 14:23:24 26 4
gpt4 key购买 nike

我有一个我不能改变的类:

public enum MyEnum {
Item1 = 0,
Item2 = 1
}
public class foo {
[JsonConverter(typeof(StringEnumConverter))]
public MyEnum EnumTypes {get; set; }
}

某处 JsonConvert.SerializeObject 序列化对象,由于 JsonConverter 属性,它吐出 foo.EnumTypes 的枚举值的名称 而不是数字。

有没有办法让 JsonConvert.SerializeObject 忽略 EnumTypes 属性上的属性?

最佳答案

这是可能的,但过程有点复杂。

基本思想是创建自定义 ContractResolver并覆盖其 CreateProperty 方法。像这样:

internal sealed class MyContractResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty( MemberInfo member, MemberSerialization memberSerialization )
{
var property = base.CreateProperty( member, memberSerialization );

if( member.DeclaringType == typeof( foo ) && property.PropertyType == typeof( MyEnum ) )
{
property.Converter = null;
}

return property;
}
}

您还需要实际实例化此类并将其传递到您的序列化器/反序列化器中。它的外观取决于您进行序列化的具体方式,因此我无法保证提供有关如何使用它的相关示例。

如果您只是使用静态 SerializeObject 方法:

JsonConvert.SerializeObject( valueToSerialize, new SerializerSettings { ContractResolver = new MyContractResolver() } );

关于c# - 无论如何让 JsonConvert.SerializeObject 忽略属性上的 JsonConverter 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45643903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com