2012-09-07 39 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

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