我有麻煩反序列化我的對象。它包含以下屬性:JSON.NET:反序列化一個類包含一個從接口派生的對象列表
public List<IShape> Shapes { get; set; };
和JSON.NET反序列化器總是告訴我,它不可能實例化一個接口。
我有幾個類實現接口,實現IShape接口,例如Polyline -> IPolyline -> IShape
。我嘗試了兩種解決方案已經:
但我得到了同樣的例外,那IShape的不能instantied,被拋出。
我用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返回一條Polyline,它就可以工作,但不會創建任何其他形狀(例如橢圓)。
在 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
方法,在自定義轉換器重寫,如果我讓我打印的objectType的完整類型名稱,它總是IShape的,從來沒有別的......
的可能重複[JSON.NET - ?如何反序列化接口的實例集合(http://stackoverflow.com/questions/15880574/json-net-how-to-deserialize-collection-of-interface-實例) – nawfal 2014-07-20 12:02:57