我使用的是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; }
...
}