为数据结构中的一个类指定自定义反序列化器,并将其余部分保留为默认反序列化器

时间:2017-01-20 18:27:59

标签: c# json serialization json-deserialization

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

使用JSON.NET,是否有办法仅为D类“注册”自定义反序列化器 - 允许默认反序列化器处理类A到C - 然后通过单个方法调用反序列化整个数据结构反序列化A类的根对象?

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

1 个答案:

答案 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/