我正在尝试为结构实现自定义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属性是真的。我在这里不知所措,有什么想法吗?
答案 0 :(得分:1)
我想我在Brian的帮助下解决了它,问题与上面的代码无关 - 我认为我反序列化的TransformMatrix只是一个只读属性。我使用的解决方案是暴露解串器可以编写的另一个属性。