【问题标题】:JMS Serializer exclude public propertiesJMS 序列化程序排除公共属性
【发布时间】:2026-01-27 18:20:04
【问题描述】:

我有一个要序列化的类,但 exclude 是一个公共属性。到目前为止,我尝试了@Exclude,但我没有工作(见结果)。

任何想法如何解决这个问题?

实体

class Checkout extends Entity
{
    /**
     * @Exclude()
     */
    public $normalizerCallbacks = [
        'a' => 1,
        'b' => 2,
    ];

    ..........

序列化

$checkout = $this->getDoctrine()->getRepository('App:Checkout')->find($id);

$serializer = $this->get('jms_serializer');
$data = $serializer->serialize($checkout, 'json');

结果

{
    normalizer_callbacks: {
        a: 1
        b: 2
    }
}

编辑:试用 2015-09-10 18 --> 不工作

use JMS\Serializer\Annotation as JMS;

/**
 * User
 *
 * @ORM\Table(name="checkout", options={"collate"="utf8_general_ci"})
 * @ORM\Entity
 *
 * @JMS\ExclusionPolicy("none")
 */
class Checkout extends Entity
{
    /**
     * @JMS\Exclude();
     */
    public $normalizerCallbacks = [
...

编辑:试用 2015-09-11 09(更新 12)--> 配置

  1. 添加到 "jms/serializer-bundle": "^1.0" composer 并运行更新
  2. new JMS\SerializerBundle\JMSSerializerBundle() 添加到AppKernel
  3. jms_serializer.camel_case_naming_strategy.class: JMS\Serializer\Naming\IdenticalPropertyNamingStrategy添加到parameters.yml
  4. 然后在 Serialize 中使用它

【问题讨论】:

    标签: php symfony jmsserializerbundle


    【解决方案1】:

    试试你是否包含正确:

    use JMS\Serializer\Annotation as JMS;
    

    然后像这样使用它:

    @JMS\Exclude();
    

    在您的注释中。

    同时确保您的课程使用@ExclusionPolicy("none") 进行注释(请参阅http://jmsyst.com/libs/serializer/master/reference/annotations)。

    你也可以反过来做,特别是@Expose,而类是用@ExlucsionPolicy("all")注释的。

    确保在重新测试之前清理缓存。

    【讨论】:

    • 我试过Trial 2015-09-10 18的版本,还是没有成功!
    • hm,棘手,您能展示一下您是如何配置 JMSSerializer 以及如何加载它的吗?
    • Trial 2015-09-11 09 解释了我的所作所为,有什么遗漏吗?
    • 目前看不到任何东西 - 您是否尝试了任何其他 JMS 注释以确保此处使用 JMS?
    • 我错过了我将jms_serializer.camel_case_naming_strategy.class: JMS\Serializer\Naming\IdenticalPropertyNamingStrategy 添加到parameters.yml