use*_*660 5 symfony deserialization symfony-3.3
尝试在 Symfony 3.3 中使用序列化器组件。我与具有“DateTime”成员的实体斗争。
我的 config.yml 序列化程序初始化:
serializer:
enable_annotations: true
Run Code Online (Sandbox Code Playgroud)
在 service.yml 中添加了这个:
datetime_method_normalizer:
class: Symfony\Component\Serializer\Normalizer\DateTimeNormalizer
public: false
tags: [serializer.normalizer]
Run Code Online (Sandbox Code Playgroud)
反序列化后的代码如下所示:
$yml = [...] // It was created by serializer->serialize()
$serializer = $this->get('serializer');
$myObject = $serializer->deserialize($yml, MyObject::class, "yaml");
Run Code Online (Sandbox Code Playgroud)
错误是: Expected argument of type "DateTime", "string" given
在 vendor/symfony/symfony/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php(第 204 行)
我认为 DateTimeNormalizer::denormalize 永远不会被调用。知道如何让它恢复生机吗?
信息:DateTimeNormalizer::__constructor() 被调用。
小智 0
唯一的官方方法似乎是声明callback
:
$callback = function ($dateTime) {
return $dateTime instanceof \DateTime
? $dateTime->format(\DateTime::ISO8601)
: '';
};
$normalizer->setCallbacks(array('createdAt' => $callback));
$serializer = new Serializer(array($normalizer), array($encoder));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6742 次 |
最近记录: |