dongyong6045 2014-10-10 13:23
浏览 47
已采纳

有没有办法手动初始化JSM Serializer?

I'm writing a PHP wrapper project for an API. Within my response object, I like to deserialize a JSON block to an object. It is not a symfony standard framework project, just a PHP project with symfony components.

Within a symfony project I would simply call

$serializer = $this->get('serializer');

and be done with it. But of course my class is neither ContainerAware nor has any kind of access to a container or services in general. I need to use the JMS Serializer as the API I'm writing the wrapper for also used the JMS Serializer (with configurations).

Is there a way to initialize a JMS Serializer (JMS\Serializer\Serializer) manually?

Within the services.xml of the JMS Serializer there is the following definition:

<service id="jms_serializer.serializer" class="%jms_serializer.serializer.class%" public="false">
    <argument type="service" id="jms_serializer.metadata_factory" />
    <argument type="service" id="jms_serializer.handler_registry" />
    <argument type="service" id="jms_serializer.object_constructor" />
    <argument type="collection" /><!-- Serialization Visitors -->
    <argument type="collection" /><!-- Deserialization Visitors -->
    <argument type="service" id="jms_serializer.event_dispatcher" />
</service>

...

<service id="jms_serializer.metadata_factory" class="%jms_serializer.metadata.metadata_factory.class%" public="false">
    <argument type="service" id="jms_serializer.metadata.lazy_loading_driver" />
    <argument>Metadata\ClassHierarchyMetadata</argument>
    <argument />
    <call method="setCache">
        <argument type="service" id="jms_serializer.metadata.cache" on-invalid="ignore" />
    </call>
</service>

...

<service id="jms_serializer.metadata.lazy_loading_driver" class="%jms_serializer.metadata.lazy_loading_driver.class%" public="false">
    <argument type="service" id="service_container" />
    <argument>jms_serializer.metadata_driver</argument>
</service>

...

I could initialize one object after the other but I would still be stuck at the point where the Service Container (<argument type="service" id="service_container" />) is required.

Is there still a way to initialize the JMS Serializer manually?

  • 写回答

1条回答 默认 最新

  • dongqiao1158 2014-10-10 14:55
    关注

    The services file you are looking at comes from the Symfony 2 framework specific JMSSerializerBundle.

    The bundle itself is just a thin wrapper to the generic JMS serializer package code.

    The package documentation will get you going: https://github.com/schmittjoh/serializer/tree/master/doc

    The construction part can be found here: https://github.com/schmittjoh/serializer/blob/master/doc/configuration.rst

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 angular开发过程中,想要读取模型文件,即图1的335行,会报404错误(如图2)。但我的springboot里配置了静态资源文件,如图3。且在该地址下我有模型文件如图4,请问该问题该如何解决呢?
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 vite打包后,页面出现h.createElement is not a function,但本地运行正常
  • ¥15 Java,消息推送配置