2015-11-20 18 views
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属性为真。我在这里感到茫然,有什么想法?

+2

您错过了一些关键细节。 JSON的外观是什么,Item和TransformMatrix的定义是什么样子?根据您提供的信息,我无法再现问题。带有JSON和类/结构定义的基本程序在TransformMatrixConverter中遇到了异常。小提琴:https://dotnetfiddle.net/IEexiW –

+0

您是否确认过Json.NET实际上已将'typeof(TransformMatrix)'传递给'CanConvert(type)'?或者你只是验证1)它被调用,并且2)当用'typeof(TransformMatrix)'手动调用时它返回'true'? – dbc

+0

@BrianRogers啊,谢谢!你让我回过头来看看有问题的另一部分代码!我想我现在解决了它 - 我认为我正在反序列化的TransformMatrix只是一个只读属性。 – user1846231

回答

1

我觉得我和Brian的帮助下解决了这个问题,这个问题是无关上面的代码 - 我想我是反序列化TransformMatrix只是一个只读属性。我使用的解决方案是揭示解串器可以编写的另一个属性。

相关问题