Сериализатор JMS игнорирует политику исключения с аннотацией доступа?

Итак, у меня есть такой класс ответа (упрощенный фрагмент):

/**
 * @Serializer\ExclusionPolicy("all")
 */
class MyResponse
{
    /**
     * @Serializer\Expose
     * @Serializer\Groups({"myGroup"})
     * @Serializer\Accessor("getMyName")
     */
    public $name;

    public function getMyName()
    {
        return 'Donald';
    }
}

Политика исключения исключает сериализацию всех полей, если только они явно не представлены с помощью @Serializer\Expose и группа данных не совпадает.

Это отлично работает для всех полей, кроме тех, у которых есть аннотация @Serializer\Accessor. Эти поля всегда включаются, независимо от групповой политики. Я не могу найти ничего в документах или каких-либо других отчетах, чтобы предположить, что аннотация @Serializer\Accessor переопределяет групповую политику, или какого-либо способа вручную проверить группу данных в функции доступа.

Есть ли способ сделать это, или мне придется встроить все мои функции доступа в конструктор ответа? Я пытался избежать огромной функции конструктора 100L+, но это лишает смысла использование аннотации доступа, если я не могу исключить определенные поля...


person Chris    schedule 24.07.2017    source источник
comment
Вы пробовали использовать $serializer->serialize(new MyResponse(), 'json', \JMS\Serializer\SerializationContext::create()->setGroups(array('Default'))); ?   -  person tftd    schedule 24.07.2017


Ответы (1)


Я никогда не использовал аннотацию Accessor, поэтому не знаю, почему она не работает, но могу предложить вам размещать аннотации непосредственно в функциях, помечая их как виртуальные свойства:

/**
 * @Serializer\ExclusionPolicy("all")
 */
class MyResponse
{
    public $name;

    /**
     * @Serializer\VirtualProperty()
     * @Serializer\SerializedName("name")
     * @Serializer\Groups({"myGroup"})
     */
    public function getMyName()
    {
        return 'Donald';
    }
}
person DrKey    schedule 26.07.2017