当我们所知道的是使用它们的接口时,我已经实现了一个自定义JsonConverter来反序列化具体类。鉴于此,我使用以下内容覆盖了ReadJson方法:
public class MyConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(IMyInterface));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var jsonObject = JObject.Load(reader);
if (jsonObject["Type"].Value<string>() == "MyType")
return jsonObject.ToObject<MyConcrete>(serializer);
}
}
在界面上我添加了以下装饰:
[JsonConverter(typeof(MyConverter))]
public interface IMyInterface { ... }
我似乎遇到的问题是,在尝试反序列化时,我不断获得StackOverflow异常,并且认为它正在为JSON结构中的每个元素绕过此自定义转换器。其中有不少(!)
如果我删除了界面的装饰,而是将自定义转换器添加到手动调用转换器...它工作正常!
var jsonSerializerSettings = new JsonSerializerSettings
{
Converters = { new MyConverter() }
};
有没有办法解决这个问题而无需专门致电客户转换器?我担心对不需要自定义JsonConverter的对象进行反序列化时会出现意外行为。想法?