【发布时间】:2014-07-25 00:53:00
【问题描述】:
我正在使用 Json.NET (6.0.3) 进行序列化。我编写了一个自定义 JsonConverter TestConverter 来处理一些 BaseClass 的实例(通过将它们转换为整数 id 并返回)。当我使用 JsonConverter[typeof(TestConverter)] 注释类中的属性时,一切正常。
然而,我更喜欢使用自定义合同解析器,根据documentation,它应该能够完全替换所有属性使用。
以下是我设置合同解析器的方法:
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;
}
序列化一切正常,但是我在合约解析器中设置的转换器似乎在反序列化过程中完全忽略。 TestConverter 的 ReadJson 方法永远不会被调用。
我是否遗漏了一些非常明显的东西?我需要将转换器附加到其他地方的财产吗?
我创建了一个可运行的小示例来演示该问题。如果第 57 行中的 [JsonConverter] 属性被注释掉,程序将崩溃并出现异常,因为 Json.net 正在尝试将整数转换为对象,而不是使用 TestConverter。
示例的来源可以在这里找到:http://pastebin.com/xgVS6hXY
提前感谢您的帮助!
【问题讨论】:
标签: c# .net serialization json.net