1

我正在使用 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# 驱动程序,它在内部序列化和反序列化对象。如前所述,问题在于它没有序列化接口实现。

4

1 回答 1

4

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

[JsonProperty(ItemTypeNameHandling = TypeNameHandling.Auto)]

public class Recipe
{
    [JsonProperty(ItemTypeNameHandling = TypeNameHandling.Auto)]
    public List<IFood> Foods{ get; set; }
    ...
}
于 2012-09-08T08:01:02.653 回答