2012-09-07 36 views
1

我正在使用C#.NET 4.0,Newtonsoft JSON 4.5.0。Newtonsoft JSON接口序列化错误

public class Recipe 
{ 
    [JsonProperty(TypeNameHandling = TypeNameHandling.All)] 
    public List<IFood> Foods{ get; set; } 
    ... 
} 

我想序列化和反序列化这个食谱对象。如果我在应用程序生命周期中序列化和反序列化对象,这会成功,但是如果我序列化对象,退出应用程序然后反序列化它,那么它会抛出异常,无法实例化IFood(因为它是一个接口)。

问题是它没有序列化接口的实现。

“$类型”: “System.Collections.Generic.List`1 [[NSM.Shared.Models.IFood,NSMShared],mscorlib程序” 使用TypeNameHandling.Object和Array

我试图和自动,但它没有帮助。有什么方法可以正确地序列化它吗?或者至少在反序列化之前定义类映射?

编辑: 我使用JSON加上吊床(http://code.google.com/p/relax-net/),用于CouchDB的,其内部序列化和反序列化对象C#的驱动程序。如前所述,问题在于它没有序列化接口实现。

回答

4

这是关键,您必须添加此属性,因为它定义了如何处理集合中的项目。

[JsonProperty(ItemTypeNameHandling = TypeNameHandling.Auto)]

public class Recipe 
{ 
    [JsonProperty(ItemTypeNameHandling = TypeNameHandling.Auto)] 
    public List<IFood> Foods{ get; set; } 
    ... 
} 
+1

...这当然不工作,如果食品未初始化/是空的。 –