Jon*_*nas 5 .net c# serialization json.net
我正在使用Json.NET(6.0.3)进行序列化.我编写了一个自定义JsonConverter TestConverter来处理某些实例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;
}
Run Code Online (Sandbox Code Playgroud)
一切都适用于序列化,但似乎在反序列化过程中我完全忽略了在合同解析器中设置的转换器.该ReadJson方法TestConverter不会被调用.
我错过了一些非常明显的东西吗 我是否需要将转换器连接到其他地方的属性?
我创建了一个小的可运行示例来演示该问题.如果第[JsonConverter]57行中的属性被注释掉,程序将因异常而崩溃,因为Json.net正在尝试将整数转换为对象而不是使用TestConverter.该示例的源代码可以在这里找到:http://pastebin.com/xgVS6hXY
预先感谢您的任何帮助!
[JsonConverter(typeof(TestConverter))]从类的 Artist 属性中删除该属性Song。将合同解析器的设置更改为以下示例:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
一切都应该工作正常。