为数据结构中的一个 class 指定一个自定义反序列化器,其余的留给默认反序列化器
Specify a custom deserializer for one class inside a data structure and leave the rest to the default deserializer
我有一个嵌套数据结构:Class A 包含 Class B 包含 Class C 包含 Class D.
使用 JSON.NET,是否有办法 "register" 仅针对 Class D 的自定义反序列化器——允许默认反序列化器处理 Classes A 到 C -- 然后通过单个方法调用反序列化整个数据结构以反序列化 Class A?
的根对象
也许我误解了 API 但到目前为止,我发现 JSON.NET 中唯一可能的方法需要为所有 4 个 Class 编写自定义反序列化器,以便每个可以为嵌套在其中的 class 调用自定义反序列化器(即,A 的自定义反序列化器调用 B 的自定义反序列化器,等等)。当我真正想要的是自定义 Class D 的反序列化方式时,这将需要大量工作。
要为 JSON.NET 指定自定义反序列化器以用于特定 class,您可以使用 JsonConverter
属性来实现。在上述问题的示例中,Class 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
returns false
因为我只想写一个解串器。如果您还希望它序列化,您可以覆盖 WriteJson
方法。
这是 Newtonsoft API 文档中的相关页面:
http://www.newtonsoft.com/json/help/html/JsonConverterAttributeClass.htm
本网站在 de/serializing 枚举的上下文中提供了示例和其他详细信息:
https://gooddevbaddev.wordpress.com/2013/08/26/deserializing-c-enums-using-json-net/
我有一个嵌套数据结构:Class A 包含 Class B 包含 Class C 包含 Class D.
使用 JSON.NET,是否有办法 "register" 仅针对 Class D 的自定义反序列化器——允许默认反序列化器处理 Classes A 到 C -- 然后通过单个方法调用反序列化整个数据结构以反序列化 Class A?
的根对象也许我误解了 API 但到目前为止,我发现 JSON.NET 中唯一可能的方法需要为所有 4 个 Class 编写自定义反序列化器,以便每个可以为嵌套在其中的 class 调用自定义反序列化器(即,A 的自定义反序列化器调用 B 的自定义反序列化器,等等)。当我真正想要的是自定义 Class D 的反序列化方式时,这将需要大量工作。
要为 JSON.NET 指定自定义反序列化器以用于特定 class,您可以使用 JsonConverter
属性来实现。在上述问题的示例中,Class 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
returns false
因为我只想写一个解串器。如果您还希望它序列化,您可以覆盖 WriteJson
方法。
这是 Newtonsoft API 文档中的相关页面: http://www.newtonsoft.com/json/help/html/JsonConverterAttributeClass.htm
本网站在 de/serializing 枚举的上下文中提供了示例和其他详细信息: https://gooddevbaddev.wordpress.com/2013/08/26/deserializing-c-enums-using-json-net/