Newtonsoft JSON接口集合序列化错误



我使用的是C#.NET 4.0,Newtonsoft JSON 4.5.0。

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

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

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

"$type":"System.Collections.Generic.List`1[[NSM.Shared.Models.IFood,NSMShared]],mscorlib"

我尝试过使用TypeNameHandling、Object和Array以及Auto,但都无济于事。有什么方法可以正确地序列化它吗?或者至少在反序列化之前定义类映射?

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

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

[JsonProperty(ItemTypeNameHandling=TypeNameHandling.Auto)]

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

最新更新