2016-06-28 163 views
0

使用Json.net,我想反序列化包含接口对象的篮子。 这...序列化接口对象列表

{ 
"Owner": "John", 
"Fruit": [ <an apple object>, <a pear>, etc... ] 
} 

...应该进入这个......

class Basket 
{ 
string Owner; 
List<iFruit> Fruit; //contains instances of Apple, Pear,... 
} 

接口不能被实例化,因此需要以具体的对象转换。我找到了使用JsonConverter创建具体Apple和Pear实例的示例。

List<iFruit> fruit = JsonConvert.DeserializeObject<List<iFruit>>(json, new FruitConverter()); 

如何反序列化整篮,其中JsonConverter仅用于在水果列表中的对象:但是列表中总是直接与像线产生的?

+2

我猜你可以在'IFruit'接口或'Fruit'成员上使用['JsonConverterAttribute'](http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonConverterAttribute.htm) 。 – Blorgbeard

+0

当然可以。就这么简单。接口定义的属性。谢谢! (如果您想将此标记为最佳答案,请随时在下面重复。) –

+0

没关系,我真的给了你一个提示。您可以自己发布答案并接受答案。 – Blorgbeard

回答

1

问题的解决方案很简单,真的。

[JsonConverter (typeof(IFruitConverter))] 
public interface iFruit 
    { 

    } 

作为旁注,转换器是基于this answer。 我向转换器添加了一个CanWrite覆盖,该转换器返回false,以便在序列化过程中它将被忽略,并且仅在反序列化过程中发挥作用。 感谢@Blorgbeard!