symfony - 自定义规范器未通过名称转换器服务

标签 symfony serialization

我正在创建一个自定义(去)规范化器来处理实体。我已经创建了规范化器并允许服务容器 Autowiring /自动配置。在反序列化期间正确选择了服务,但我在使用名称转换器时遇到了问题。我想使用 MetadataAwareNameConverter 服务,因为我在实体中使用 @SerializedName 注释。无论我做什么,自定义规范化器中的它始终为空。我尝试了多种获取名称转换器服务的方法:

  1. 在我的类构造函数中显式设置它
  2. 在服务定义中设置它(有效地摆脱 Autowiring /自动配置)
  3. 在framework.yaml中将MetadataAwareNameConverter设置为默认值(我发现它已经是默认值了)。
  4. 将现有规范化器复制到我的 src 中并将其重命名,以查看它是否获得了正确的名称转换器(它仍然不起作用)

内置标准化器可以毫无问题地获得名称转换器,这只是我的自定义标准化器遇到此问题。

还有什么我应该尝试的吗?我是否错过了设置服务的步骤?任何方向都值得赞赏。

更新 - 当我转储服务容器时,参数列表中缺少名称转换器服务

---------------- ----------------------------------------------------------
  Option           Value
 ---------------- ----------------------------------------------------------
  Service ID       App\Normalizer\QNormalizer
  Class            App\Normalizer\QNormalizer
  Tags             serializer.normalizer
  Public           no
  Synthetic        no
  Lazy             no
  Shared           yes
  Abstract         no
  Autowired        yes
  Autoconfigured   yes
  Arguments        Service(serializer.mapping.class_metadata_factory)
                   -----THIS IS WHERE THE NAME CONVERTER SHOULD BE----
                   Service(property_accessor)
                   Service(property_info)
                   Service(serializer.mapping.class_discriminator_resolver)

最佳答案

services.yaml 中手动注入(inject) MetadataAwareNameConverter 为我解决了问题。

App\Serializer\CustomNormalizer:
    arguments:
        $nameConverter: '@serializer.name_converter.metadata_aware'

关于symfony - 自定义规范器未通过名称转换器服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60938367/

相关文章:

php - 无法捕获 symfony FatalErrorException

mysql - Doctrine 2 DQL CASE WHEN in Count

php - 使用 composer 离线安装 Symfony

java - 反序列化时跳过新的 transient 字段

php - 根据另一个表或字段中的数组中的记录保存 id

php - 基于注释的 symfony2 表单创建器

c# - 使用 WCF 将 JSON 对象的一部分序列化和反序列化为字符串

c# - XmlSerializer 相当于 IExtensibleDataObject

java - Akka 是如何处理消息版本的?

php - 多种形式包括symfony(同一页面)