C# 为数据结构中的一个类指定自定义反序列化程序,其余的由默认反序列化程序处理

C# 为数据结构中的一个类指定自定义反序列化程序,其余的由默认反序列化程序处理,c#,json,serialization,json-deserialization,C#,Json,Serialization,Json Deserialization,我有一个嵌套的数据结构:类a包含类B包含类C包含类D 使用JSON.NET,是否有一种方法可以“注册”仅用于类D的自定义反序列化程序—允许默认反序列化程序处理类a到C—然后使用单个方法调用反序列化整个数据结构,以反序列化类a的根对象 也许我误解了API,但到目前为止,我发现JSON.NET中唯一可能的方法是为所有4个类编写自定义反序列化程序,以便每个类都可以为嵌套在其中的类调用自定义反序列化程序(即,A的自定义反序列化程序调用B的自定义反序列化程序,等等)。当我真正想要的是自定义类D的反序列化方

我有一个嵌套的数据结构:类a包含类B包含类C包含类D

使用JSON.NET,是否有一种方法可以“注册”仅用于类D的自定义反序列化程序—允许默认反序列化程序处理类a到C—然后使用单个方法调用反序列化整个数据结构,以反序列化类a的根对象


也许我误解了API,但到目前为止,我发现JSON.NET中唯一可能的方法是为所有4个类编写自定义反序列化程序,以便每个类都可以为嵌套在其中的类调用自定义反序列化程序(即,A的自定义反序列化程序调用B的自定义反序列化程序,等等)。当我真正想要的是自定义类D的反序列化方式时,这将需要大量的工作。

要为JSON.NET指定用于特定类的自定义反序列化器,可以使用
JsonConverter
属性。在上述问题的示例中,D类的声明可能如下所示:

[JsonConverter(typeof(ClassDConverter))]
public class ClassD
{

}
其中
ClassDConverter
是自定义反序列化程序,必须扩展
JsonConverter

public class ClassDConverter : JsonConverter
{
     public override object ReadJson(...)
     {
           // custom deserialization code here
     }

     public override bool CanConvert(Type objectType)
     {
          return typeof(ClassD).isAssignableFrom(objectType);
     }

     public override bool CanWrite
     {
         get { return false; }
     }
 }
CanWrite
返回
false
,因为我只想编写反序列化程序。如果还希望它序列化,可以重写
WriteJson
方法

以下是Newtonsoft API文档中的相关页面:

本网站提供了一个示例和有关取消/序列化枚举的其他详细信息:

你想实现什么样的定制?我想你在说什么?@ChetanRanpariya我想实现的定制是D实际上是一个包含两个子类型D1和D2的接口,我想在反序列化之前检查它是哪一个。这里解释了实现这种特殊类型自定义的方法:因此我知道如何编写自定义反序列化程序,但现在我想知道如何“注册”它,以便在反序列化过程中调用它,而默认反序列化程序处理数据结构的其余部分。@Mikemcaughan感谢链接。我不确定它是否回答了我的问题。我仍然希望反序列化整个数据流。我只希望默认的反序列化程序完成大部分工作,而我只编写处理反序列化类D的部分。您提供的链接是否解释了如何实现这一点?谢谢它告诉您如何获取JSON的特定部分并反序列化这些部分。我想您可以使用默认的反序列化器进行反序列化,然后使用自定义的反序列化对象填充“错误”的反序列化“类D”。这是两次反序列化,但我不知道如何告诉默认反序列化器什么类是什么。看起来他也在问类似的问题。