【发布时间】:2011-08-17 08:27:20
【问题描述】:
我有以下类,我使用Json.NET 对 JSON 进行序列化和反序列化:
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 Tasks 的列表组成,我将它们通过线路传递到也知道这些类的消息处理器。
当我序列化 Message 时,我会执行以下操作:
string json = JsonConvert.SerializeObject(
message,
Formatting.Indented,
new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects
});
我的派生类与嵌入在 JSON 中的 $type 名称一样被序列化。
但是,当我将 JSON 字符串反序列化回 Message 对象时,反序列化器不会重新水化我的派生类对象。我只是得到了基类Task的列表。
我认为使用TypeNameHandling = TypeNameHandling.Objects 添加到 JSON 字符串中的 $type 可能会向反序列化器提供关于要实例化哪些类的提示,但我错了。
我需要做什么来反序列化基类为Task 的对象并将派生类重新水化为List<Task>?
对于这个项目,我仅限于 .NET Framework 3.5。
【问题讨论】: