此代码片段来自文档
# config.yml
jms_serializer:
profiler: %kernel.debug%
enum_support: true # PHP 8.1 Enums support, false by default for backward compatibility
default_value_property_reader_support: true # PHP 8.0 Constructor Promotion default value support, false by default for backward compatibility
twig_enabled: 'default' # on which instance is twig enabled
handlers:
datetime:
default_format: "Y-m-d\\TH:i:sP" # ATOM
default_timezone: "UTC" # defaults to whatever timezone set in php.ini or via date_default_timezone_set
array_collection:
initialize_excluded: false
symfony_uid:
default_format: "canonical"
cdata: true
我正在尝试在 Symfony 上的一个项目中进行设置。
jms_serializer:
enum_support: true
default_value_property_reader_support: true
我使用 DI SerializerInterface 创建序列化器
public function __construct(
private SerializerInterface $jmsSerializer
) {
}
当我尝试反序列化 json 时< I catch error: The provided class
"App\\...\\Enumeration\\DocumentDescribeTypeEnum\" is an enum, and cannot be instantiated
如何解决?
我认为查看类的(反)序列化配置(注释、YAML 等)会很有帮助。 然而,以下内容可能会为您和其他人指明正确的方向。
我也想反序列化枚举,并且在某个时间看到了与您相同的错误。 我们使用 JMS Serializer 作为独立库,并且我们的配置位于 YAML 中。
就我而言,我需要做两件事:
$serializer = SerializerBuilder::create()
->enableEnumSupport() // <-- This is the key bit
->build()
;
Fully\Qualified\Class\Name:
properties:
foo:
expose: true
type: enum<'Fully\Qualified\Enum\Name'> # <-- This is the key bit
注意至少在 YAML 中,枚举的完全限定名称周围的引号是必需的——鉴于我在 JMS Serializer 代码中看到的内容,我希望如果您使用注释,同样的情况也适用。