你们两个都可以。您选择哪一个真正取决于对性能的潜在影响,以及愿意编写多少代码。
解串器更昂贵。这是因为反序列化器的输入是一棵json树,GSon必须先创建一个与您的类匹配的属性的完整JsonElement子树,然后才能将其传递给反序列化器。如果您的课程有很多嵌套,那么成本会增加。对于普通物体,它可以忽略不计。
似乎您将基于
type将包含在目标对象中的属性的值来知道要创建哪个类。您的解串器将需要
- 查看传递的
JsonElement
对象,读取type
属性,确定类型 context.deserialize()
用类和传递给您的相同元素进行调用- 如果类型丢失或无效,则引发错误
您的类型适配器必须更复杂。类型适配器的输入是流,而不是元素/子树。您可以完全从流中加载下一个值,对其进行解析,然后完全执行解串器的操作,这没有任何意义,您可以使用解串器接口。另外,您可以读取流,查看有哪些属性,将它们保存到局部变量中,直到到达
type属性(无法预测其位置),然后完成读取其余属性,并创建最终的
Gold/
Silver基于类型的对象,并读取和保存所有属性。



