自定义JsonConverter不会调用ReadJson

时间:2015-11-20 15:22:23

标签: c# json.net

我正在尝试为结构实现自定义JsonConverter,但是我很难让它工作。我之前已经为另一个类实现了一个自定义转换器,并且一个可以完美地工作,我认为我为这个做了同样的事情,但我的转换器的ReadJson方法从未被调用过。

这是班级:

public class TransformMatrixConverter : JsonConverter
{
  public override bool CanConvert(Type objectType)
  {
    return typeof(TransformMatrix).IsAssignableFrom(objectType);
  }

  public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
  {
    throw new NotImplementedException();
  }

  public override bool CanWrite
  {
    get { return false; }
  }

  public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
  {
    throw new NotImplementedException();
  }
}

以下是我在Item类中使用它的方法。你可以看到我的其他转换器,它工作正常。

public static Item FromJSON(string json)
{
  JsonConverter[] converters = { new LineConverter(), new TransformMatrixConverter() };
  return JsonConvert.DeserializeObject<Item>(json, new JsonSerializerSettings()
  {
    Converters = converters
  });
}

会发生什么:调用我的转换器的CanConvert方法并在适当时正确返回true;但是,ReadJson方法永远不会被命中,我在那里有一个断点,而且永远不会抛出异常。我已经验证转换器的CanRead属性是真的。我在这里不知所措,有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我想我在Brian的帮助下解决了它,问题与上面的代码无关 - 我认为我反序列化的TransformMatrix只是一个只读属性。我使用的解决方案是暴露解串器可以编写的另一个属性。