我正在使用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
预先感谢您的任何帮助!
[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] 删除。
我来说两句