我在反序列化我的对象时遇到了麻烦。它包含以下属性:
public List<IShape> Shapes { get; set; };
JSON.NET 反序列化器总是告诉我,无法实例化接口。
我有几个类实现了实现 IShape 接口的接口,例如Polyline -> IPolyline -> IShape
。我已经尝试了两种解决方案:
但是我得到了同样的异常,即 IShape 不能被实例化,被抛出。
TypeNameHandling.Auto
我用,序列化对象TypeNameHandling.All
也无济于事,即使我使用上面链接的帖子中提到的转换器。
有谁知道这个问题的解决方案?如果需要一些代码,我很乐意发布它。
这是生成的 JSON 示例。
"$type": "SketchModel.Layer, SketchModel",
"Id": 57865477,
"Shapes": {
"$type": "System.Collections.Generic.List`1[[SketchModel.Shapes.AbstractShapes.IShape, SketchModel]], mscorlib",
"$values": [
{
"$type": "SketchModel.Shapes.Polyline, SketchModel",
此行负责该问题:
"System.Collections.Generic.List`1[[SketchModel.Shapes.AbstractShapes.IShape, SketchModel]], mscorlib"
它根本不知道如何实例化 IShape。如果我创建一个自定义转换器并让它为每个 IShape 返回一条折线,它可以工作,但不会创建任何其他形状(例如椭圆)。
在
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
自定义转换器中覆盖的方法中,如果我让我打印 objectType 的完整类型名称,它始终是 IShape,而不是其他任何东西......