java - 我如何确定 Java 类型是否可从 JSON 转换为 JSON
问题描述
JSON-B 将类型转换LocalDate
为简单的字符串。当我有 aType
时,如何确定 JSON-B 是否会直接转换这种类型,即它是否是标量类型?
我没有实例,所以我什至不能尝试将其转换为字符串并查看它是否包含花括号。
或者我是否必须寻找具有valueOf
orparse
方法或构造函数的类型只有一个 String 参数?
解决方案
可以提前检查给定类型是否可以序列化为 JSON(即从强类型转换为弱类型格式),但是没有办法检查给定类型是否可以反序列化为 POJO,直到你有运行时的实际 JSON 值(即从弱类型格式转换为强类型格式)。
一般来说,可序列化类型的规则很简单:
- 类必须是可访问的(公共的或受保护的)
- 如果类是内部类,它必须是静态的
- 零个或多个包含/返回可序列化类型的公共字段/getter
一般来说,可反序列化的类型的规则是:
- 类必须是可访问的(公共的或受保护的)
- 如果类是内部类,它必须是静态的
- 零个或多个包含/返回可反序列化类型的公共字段/设置器
- 该类必须有一个公共的无参数构造函数(或一个用 注释的 ctor
@JsonbCreator
) - 或该类必须有一个带有注释的公共静态工厂方法
@JsonbCreator
您可能会发现构成“可转换类型”的内容是 JSON-B(或任何其他 Java JSON 库)中的一个非常广泛的标准。例如,{}
可以将 JSON 字符串反序列化为具有公共无参数构造函数的任何类型。同样,没有公共字段或 getter 方法的 Java 类将序列化为 JSON 字符串{}
。
由于可转换类型是一个如此广泛的术语,因此如果您进一步指定您想要实现的目标会有所帮助 - 也许我可以建议一种更具体的方法。
附加信息:
支持 JDK 中的许多常用类。有关完整列表,请参阅JSON-B 规范的第 3.3 - 3.5 节。除了内置类之外,JSON-B 规范的第 3.7 节还指定了要求。
对于反序列化,比序列化有更多的要求。它们在第 3.7 节和第 4.5节中有详细描述。
推荐阅读
- objective-c - 从 LSOpenFromURLSpec 获取 NSRunnnunigApplication
- python - 何时在 Python 中使用哪些数组实现?
- python - 修复损坏的 python 环境?
- python - 通过循环将多边形内的所有点作为值添加到字典对象
- laravel - 如何在 Laravel 构造函数中正确设置和获取 Guzzle 客户端对象值?
- python - 使用 scrapy / sitemaps 抓取具有不同项目的产品
- c++ - C++ Tensorflow 中的推理:在提供输入和输出参数的情况下运行时,Session->Run 挂起
- woocommerce - 为区域添加自定义运输选项
- python - 为什么这个线程不会重新启动?
- javascript - 如何使用该表中的按钮发送谷歌电子表格