C# 自定义JsonConverter不调用ReadJson

C# 自定义JsonConverter不调用ReadJson,c#,json.net,C#,Json.net,我试图为一个结构实现一个自定义JsonConverter,但是我很难让它正常工作。我以前为另一个类实现了一个自定义转换器,这个类工作得很完美,我想我对这个类也做了同样的事情,但是我的转换器的ReadJson方法从未被调用 这是一节课: public class TransformMatrixConverter : JsonConverter { public override bool CanConvert(Type objectType) { return typeof(Tra

我试图为一个结构实现一个自定义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
  });
}
公共静态项FromJSON(字符串json)
{
JsonConverter[]converter={new LineConverter(),new TransformMatrixConverter()};
返回JsonConvert.DeserializeObject(json,新的JsonSerializerSettings()
{
转换器=转换器
});
}

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

我想我是在Brian的帮助下解决的,这个问题与上面的代码无关-我以为我正在反序列化的TransformMatrix只是一个只读属性。我使用的解决方案是公开反序列化程序可以写入的另一个属性。

您缺少一些关键细节。JSON是什么样子的,
Item
TransformMatrix
的定义是什么样子的?根据你提供的信息,我无法重现这个问题。带有JSON和类/结构定义的基本程序在TransformMatrixConverter中遇到异常。Fiddle:您是否验证过Json.NET是否确实将
typeof(TransformMatrix)
传递给您的
CanConvert(type)
?或者您只是验证了1)它被调用,以及2)当使用
typeof(TransformMatrix)
手动调用时,它返回
true
?@BrianRogers啊,谢谢!你让我检查了我代码的另一部分,它有问题!我想我现在解决了这个问题——我认为我正在反序列化的转换矩阵只是一个只读属性。@ USE1846121,你应该考虑将你的解决方案添加到你的问题的答案中,这样别人就知道问题已经解决了。