用于自定义反序列化的JsonConverter

时间:2018-02-20 12:35:18

标签: c# json json.net

当我们所知道的是使用它们的接口时,我已经实现了一个自定义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的对象进行反序列化时会出现意外行为。想法?

0 个答案:

没有答案