【发布时间】:2015-11-20 15:22:23
【问题描述】:
我正在尝试为结构实现自定义 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 属性是真的。我在这里不知所措,有什么想法吗?
【问题讨论】:
-
您遗漏了一些关键细节。 JSON 是什么样的,
Item和TransformMatrix的定义是什么样的?根据您提供的信息,我无法重现该问题。具有组成的 JSON 和类/结构定义的基本最小程序在 TransformMatrixConverter 中遇到异常。小提琴:dotnetfiddle.net/IEexiW -
您是否验证过 Json.NET 是否确实将
typeof(TransformMatrix)传递给您的CanConvert(type)?或者您是否只是验证 1) 它被调用,以及 2) 当使用typeof(TransformMatrix)手动调用时它返回true? -
@BrianRogers 啊谢谢!您让我检查了有问题的代码的另一部分!我想我现在解决了 - 我认为我正在反序列化的 TransformMatrix 只是一个只读属性。
-
@user1846231 您应该考虑添加您的解决方案作为您问题的答案,以便其他人知道问题已解决。