我有一个嵌套的数据结构:A类包含Class B包含C类包含D类。
使用JSON.NET,是否有办法仅为D类“注册”自定义反序列化器 - 允许默认反序列化器处理类A到C - 然后通过单个方法调用反序列化整个数据结构反序列化A类的根对象?
也许我误解了API,但到目前为止,我发现JSON.NET中唯一可能的方法是为所有4个类编写自定义反序列化器,这样每个类都可以为嵌套在其中的类调用自定义反序列化器(即,A的自定义反序列化器为B调用自定义反序列化器等。当我真正想要的是定制D类反序列化的方式时,这将需要大量的工作。
答案 0 :(得分:0)
要为JSON.NET指定用于特定类的自定义反序列化器,可以使用JSESSIONID
属性执行此操作。在上述问题的例子中,D类的声明可能如下:
X-XSRF-TOKEN
其中JsonConverter
是自定义反序列化程序,必须扩展[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
方法。
以下是Newtonsoft API文档的相关页面: http://www.newtonsoft.com/json/help/html/JsonConverterAttributeClass.htm
本网站在de /序列化Enum的上下文中提供了示例和其他详细信息: https://gooddevbaddev.wordpress.com/2013/08/26/deserializing-c-enums-using-json-net/