我有以下类其中我连载并使用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