使用自定义合同解析器而不是JsonConverter属性时,将忽略自定义JsonConverter进行反序列化

乔纳斯

我正在使用Json.NET(6.0.3)进行序列化。我编写了一个自定义的JsonConverterTestConverter来处理某些实例BaseClass(通过将它们转换为整数id并返回)。当我使用注释类中的属性时,一切工作正常JsonConverter[typeof(TestConverter)]

但是,我非常喜欢使用自定义合同解析器,根据文档它应该能够完全替换所有属性用法。

这是我设置合同解析器的方法:

protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
    var property = base.CreateProperty(member, memberSerialization);
    if (typeof(BaseClass).IsAssignableFrom(property.PropertyType))
    {
        property.Converter = new TestConverter();
    }
    return property;
}

一切都可以正常进行序列化,但是在反序列化过程中,似乎完全忽略了我在合同解析器中设置的转换器。永远不会调用ReadJson方法TestConverter

我是否真的缺少明显的东西?我是否需要将转换器附加到其他位置的属性?

我创建了一个小的可运行示例来演示该问题。如果第[JsonConverter]57行中属性被注释掉,则程序将崩溃并发生异常,因为Json.net尝试将整数转换为对象而不是使用TestConverter示例的来源可以在这里找到:http : //pastebin.com/xgVS6hXY

预先感谢您的任何帮助!

伊利亚·迪莫夫(Ilija Dimov)

[JsonConverter(typeof(TestConverter))]Song的Artist属性中删除该属性将合同解析器的设置更改为以下示例:

public class TestContractResolver : DefaultContractResolver
{
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        var property = base.CreateProperty(member, memberSerialization);
        if (typeof(BaseClass).IsAssignableFrom(property.PropertyType))
        {
            var converter = new TestConverter();
            property.Converter = converter;
            property.MemberConverter  = converter;
        }
        return property;
    }
}

一切都应该正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试序列化异常时,将忽略自定义解析器

使用JsonConverter在C#中自定义JSON反序列化

使用自定义JsonConverter反序列化接口列表?

使用具有IDictionary <Mycustomclass,List <string >>的自定义解析器进行反序列化问题

JSON.Net无法在自定义JsonConverter中反序列化JSON数组

在自定义JsonConverter中反序列化嵌套对象列表

自定义JsonConverter不适用于WebAPI对象反序列化

反序列化Web.API参数时未调用自定义Json.NET JsonConverter

如何使用自定义JsonConverter在Json.NET中仅反序列化子对象?

自定义JsonConverter WriteJson不会更改子属性的序列化

当值为“ null”时,Jackson忽略自定义字段反序列化器

自定义JSON合同解析器可忽略没有自定义批注的所有属性

如何在自定义JsonConverter中使用默认序列化

使用JsonConverter的Json.NET自定义序列化-如何获得“默认”行为

如何在自定义System.Text.Json JsonConverter中使用默认序列化?

如何从自定义反序列化器调用默认解析器(在映射器中注册)

使用Jackson进行自定义反序列化:扩展默认反序列化器

NewtonSoft.Json自定义JsonConverter反序列化为DateTime不起作用

如何在JSON.NET中实现自定义JsonConverter以反序列化基类对象列表?

如何使用Java对自定义日期反序列化器进行单元测试

自定义反序列化

Spring Kafka自定义反序列化器

杰克逊反序列化不是在自定义解串器调用反序列化

使用自定义IXmlSerializer反序列化注释

使用GSON自定义反序列化枚举

使用Jackson自定义JSON反序列化

使用Jackson自定义反序列化列表

Symfony 4自定义反序列化器在实体中返回空属性

如何在杰克逊中编写自定义属性反序列化器