使JMS序列化程序不填充空值,而不填充默认值

时间:2018-11-27 07:02:47

标签: php symfony4 jmsserializerbundle jms-serializer

反序列化上的JMS Serializer 1. *仅填充输入中提供的那些字段。例如,我们有如下代码:

$criteria = $this->serializer->deserialize($request->getContent(), SearchCriteria::class, 'json');

当请求中没有提供字段limit时,它将采用在类属性中定义的默认值,即

class SearchCriteria {
    // ...
    private $limit = 10;
    // ...
}

在迁移到JMS序列化程序2.0之后,此行为已更改-现在它用空值覆盖limit字段,这破坏了我们的逻辑。有没有一种方法可以配置旧行为?我们将Symfony 4与jms/serializer-bundle@3.0.0结合使用。

这里是jms_serializer.yaml

jms_serializer:
    default_context:
        serialization:
            serialize_null: false
        deserialization:
            serialize_null: false

1 个答案:

答案 0 :(得分:0)

所以到目前为止,我发现最好的解决方法是使用PostDeserialize批注(https://jmsyst.com/libs/serializer/master/reference/annotations#postdeserialize)并手动设置默认值,例如:

/**
 * @JMS\PostDeserialize()
 */
public function postDeserialize()
{
    $this->limit = $this->limit ?? 10;
}

它看起来很丑,但是可​​以正常工作。