Сериализатор JMS исключает общедоступные свойства

У меня есть класс, который я хочу сериализовать, но 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" композитор и запустите обновление
  2. Добавьте new JMS\SerializerBundle\JMSSerializerBundle() к AppKernel
  3. Добавить jms_serializer.camel_case_naming_strategy.class: JMS\Serializer\Naming\IdenticalPropertyNamingStrategyк parameters.yml
  4. Затем использовал его, как в Serialize.

person lony    schedule 10.09.2015    source источник


Ответы (1)


Попробуйте, правильно ли вы его включили:

use JMS\Serializer\Annotation as JMS;

а затем используйте его как:

@JMS\Exclude();

в вашей аннотации.

Также убедитесь, что ваш класс снабжен аннотацией @ExclusionPolicy("none") (см. http://jmsyst.com/libs/serializer/master/reference/annotations).

Вы также можете сделать это наоборот, в частности, @Expose, в то время как класс аннотируется с помощью @ExlucsionPolicy("all").

Обязательно очистите кеш перед повторным тестированием.

person LBA    schedule 10.09.2015
comment
Я попробовал версию Trial 2015-09-10 18, но все равно безуспешно! - person lony; 10.09.2015
comment
хм, сложно, можете ли вы показать, как вы настроили JMSSerializer и как вы его загружаете? - person LBA; 10.09.2015
comment
Trial 2015-09-11 09 объясняет, что я сделал, чего-то не хватает? - person lony; 11.09.2015
comment
ничего не вижу в данный момент - вы пробовали какую-либо другую аннотацию JMS, чтобы убедиться, что JMS используется здесь? - person LBA; 11.09.2015
comment
Да, я пытался. Все работает, пока оно защищено или приватно, а если это публичное поле, то нет. - person lony; 11.09.2015
comment
Я пропустил, что добавил jms_serializer.camel_case_naming_strategy.class: JMS\Serializer\Naming\IdenticalPropertyNamingStrategy в parameters.yml - person lony; 11.09.2015
comment
Это было недоразумение. Это параметр конфигурации, который я также добавил, но он все еще не работает с общедоступными методами. - person lony; 11.09.2015