小编Dan*_* O.的帖子

JSON.NET:反序列化包含从接口派生的对象列表的类

我在反序列化我的对象时遇到问题。它包含以下属性:

public List<IShape> Shapes { get; set; };
Run Code Online (Sandbox Code Playgroud)

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",
Run Code Online (Sandbox Code Playgroud)

该行负责解决这个问题:

"System.Collections.Generic.List`1[[SketchModel.Shapes.AbstractShapes.IShape, SketchModel]], mscorlib"
Run Code Online (Sandbox Code Playgroud)

它根本不知道如何实例化 IShape。如果我创建一个自定义转换器并让它为每个 IShape 返回一条折线,它可以工作,但不会创建任何其他形状(例如椭圆)。

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)自定义转换器中重写的方法中,如果我让我打印 objectType 的完整类型名称,它始终是 IShape,而不是其他任何内容......

c# json.net deserialization

6
推荐指数
1
解决办法
9437
查看次数

标签 统计

c# ×1

deserialization ×1

json.net ×1