2011-05-03 111 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

相关问题