我有以下類其中我連載並使用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
基本上由SomeTask
和OtherTask
Task
個列表,我通過線路傳遞給消息處理器的也知道這些類。
當我連載一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。
啊......這完全打擊了我的盲點。謝謝。 – Kev 2011-05-03 00:52:56