【发布时间】:2017-01-20 18:27:58
【问题描述】:
我有一个嵌套数据结构:A 类包含 B 类包含 C 类包含 D 类。
使用 JSON.NET,有没有办法只为 D 类“注册”一个自定义反序列化器——允许默认反序列化器处理 A 到 C 类——然后通过一个方法调用反序列化整个数据结构反序列化A类的根对象?
也许我误解了 API,但到目前为止,我发现的 JSON.NET 中唯一可能的方法需要为所有 4 个类编写自定义反序列化器,以便每个类都可以调用嵌套在其中的类的自定义反序列化器(即,A 的自定义反序列化器调用 B 的自定义反序列化器等)。当我真正想要的是自定义 D 类的反序列化方式时,这将需要大量工作。
【问题讨论】:
-
你想实现什么样的定制?
-
我想你说的是something like this?
-
@ChetanRanpariya 我想要实现的自定义是 D 实际上是一个具有两个子类型 D1 和 D2 的接口,我想在反序列化之前检查它是哪个。这里解释了进行这种特定类型的自定义的方法:stackoverflow.com/questions/8030538/… 所以我知道如何编写自定义反序列化程序,但现在我想知道如何“注册”它以便在反序列化期间调用它,而默认反序列化程序处理数据结构的其余部分。
-
@MikeMcCaughan 感谢您的链接。我不确定它是否回答了我的问题。我仍然想反序列化整个数据流。我只希望默认的反序列化器完成大部分工作,而我只编写处理反序列化 D 类的部分。您提供的链接是否解释了如何实现这一点?谢谢!
-
好吧,它告诉您如何获取 JSON 的特定部分并仅反序列化这些部分。我想您可以使用默认的反序列化器进行反序列化,然后用您的自定义反序列化对象填写“错误”反序列化的“D 类”。那是反序列化两次,但我不确定如何告诉默认反序列化器什么类是什么。看起来this question 也在问类似的问题。
标签: c# json serialization json-deserialization