Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将JSON对象反序列化为使用派生类的C#类?_C#_Json.net - Fatal编程技术网

如何将JSON对象反序列化为使用派生类的C#类?

如何将JSON对象反序列化为使用派生类的C#类?,c#,json.net,C#,Json.net,我有以下类,我正在使用这些类对JSON进行序列化和反序列化: 我的派生类与JSON中嵌入的$type名称一起被序列化 但是,当我将JSON字符串反序列化回消息对象时,反序列化程序不会对派生类对象进行重新水化。我只得到一个基类任务的列表 我以为$type是通过使用typenameholling=typenameholling.Objects向反序列化程序提供了关于实例化哪些类的提示,但我错了 要反序列化基类为任务的对象,并将派生类重新水化到列表中,我需要做什么 此项目仅限于.NET Framewo

我有以下类,我正在使用这些类对JSON进行序列化和反序列化:

我的派生类与JSON中嵌入的
$type
名称一起被序列化

但是,当我将JSON字符串反序列化回
消息
对象时,反序列化程序不会对派生类对象进行重新水化。我只得到一个基类
任务的列表

我以为
$type
是通过使用
typenameholling=typenameholling.Objects
向反序列化程序提供了关于实例化哪些类的提示,但我错了

要反序列化基类为
任务的对象,并将派生类重新水化到
列表中,我需要做什么


此项目仅限于.NET Framework 3.5。

请确保使用相同的
JsonSerializerSettings
进行反序列化。它不必是相同的实例,但必须设置
typenameholling=typenameholling.Objects
才能进行反序列化。

确保使用相同的
JsonSerializerSettings
进行反序列化。它不必是同一个实例,但必须设置
typenameholling=typenameholling.Objects
才能进行反序列化。

啊……这完全击中了我的盲点。谢谢。啊……这完全击中了我的盲点。谢谢
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; }
}
string json = JsonConvert.SerializeObject(
        message, 
        Formatting.Indented, 
        new JsonSerializerSettings
          {
            TypeNameHandling = TypeNameHandling.Objects
          });