2011-05-03 106 views
0

我有以下類其中我連載並使用Json.NET deserialising和從JSON:如何將JSON對象反序列化爲使用派生類的C#類?

public class Message 
{ 
    public Guid MessageId { get; set; } 
    public List<Task> Tasks { get; set; } 
} 

public class Task 
{ 
    public int TaskId { get; set; } 
} 

public SomeTask : Task 
{ 
    public string SomeTaskThing { get; set; } 
    public List<string> Operations { get; set; } 
} 

public OtherTask : Task 
{ 
    public int OtherTaskThing { get; set; } 
    public List<int> MoreOtherTaskThings { get; set; } 
} 

Message基本上由SomeTaskOtherTaskTask個列表,我通過線路傳遞給消息處理器的也知道這些類。

當我連載一Message我做到以下幾點:

string json = JsonConvert.SerializeObject(
     message, 
     Formatting.Indented, 
     new JsonSerializerSettings 
      { 
      TypeNameHandling = TypeNameHandling.Objects 
      }); 

我的派生類序列化爲我會嵌入在JSON $type名字一起期待。

但是,當我將JSON字符串反序列化回Message對象時,反序列化器不會補充我的派生類對象。我剛剛獲得基類Task的列表。

我認爲$type通過使用TypeNameHandling = TypeNameHandling.Objects添加到JSON字符串可能已經提供了關於哪些類實例化的反序列化器的提示,但我錯了。

我需要做些什麼來反序列化基類爲Task的對象,並將派生類重新水化爲List<Task>

我僅限於此項目的.NET Framework 3.5。

回答

3

確保您使用相同的JsonSerializerSettings進行反序列化。它不一定是相同的實例,但它必須設置TypeNameHandling = TypeNameHandling.Objects才能進行反序列化。

+0

啊......這完全打擊了我的盲點。謝謝。 – Kev 2011-05-03 00:52:56

相關問題