1
我想实现一个结构的自定义JsonConverter,但我有一个很难得到它的工作。我以前为另一个类实现了一个自定义转换器,而且这个转换器完美无瑕,我认为我为这个做了同样的事情,但是我的转换器的ReadJson方法从来没有被调用过。定制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();
}
}
,下面将我如何使用它在我的项目类。你可以看到我的其他转换器,它工作正常。
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属性为真。我在这里感到茫然,有什么想法?
您错过了一些关键细节。 JSON的外观是什么,Item和TransformMatrix的定义是什么样子?根据您提供的信息,我无法再现问题。带有JSON和类/结构定义的基本程序在TransformMatrixConverter中遇到了异常。小提琴:https://dotnetfiddle.net/IEexiW –
您是否确认过Json.NET实际上已将'typeof(TransformMatrix)'传递给'CanConvert(type)'?或者你只是验证1)它被调用,并且2)当用'typeof(TransformMatrix)'手动调用时它返回'true'? – dbc
@BrianRogers啊,谢谢!你让我回过头来看看有问题的另一部分代码!我想我现在解决了它 - 我认为我正在反序列化的TransformMatrix只是一个只读属性。 – user1846231