M.Z*_*.Z. 2 serialization symfony
Acme\StoreBundle\Document\Person
/**
* @MongoDB\Document
*/
class Person
{
/**
* @MongoDB\bool
*/
private $hasemail;
/**
* @MongoDB\EmbedOne(targetDocument="Gps")
*/
private $gps;
/**
* @MongoDB\Field(name="email", type="collection")
*/
private $email;
}
...
Run Code Online (Sandbox Code Playgroud)
Acme\StoreBundle\Document\Gps
/**
* @MongoDB\EmbeddedDocument
*/
class Gps
{
/**
* @MongoDB\Field(type="float")
*/
private $latitude;
/**
* @MongoDB\Field(type="float")
*/
private $longitude;
}
...
Run Code Online (Sandbox Code Playgroud)
mongo json 文档
{
"hasemail": true,
"gps": {
"latitude": 42.941579990394,
"longitude": -85.244641161525
},
"email": [
"sdfgsdfg@sfgsdfg.org",
"sdfgsdfg@fgsdfg.com",
"sdfgsdfg@sdfgsdfg.com"
]
}
Run Code Online (Sandbox Code Playgroud)
将 mongo 文档序列化为 json 工作完美。但是将 json 反序列化为文档会引发错误:“给出了类型为 'Acme\StoreBundle\Document\Gps'、'array' 的预期参数”
反序列化代码:
$post = $request->getContent();
$serializer = $this->get('serializer');
$person = $serializer->deserialize($post, Person::class, 'json');
Run Code Online (Sandbox Code Playgroud)
所以最后我使用了 ReflectionExtractor 并且它的工作很有魅力。不需要自定义非规范化器。
http://symfony.com/doc/current/components/serializer.html#recursive-denormalization-and-type-safety
$post = $request->getContent();
$normalizer = new ObjectNormalizer(null, null, null, new ReflectionExtractor()); //
$serializer = new Serializer(array($normalizer, new DateTimeNormalizer(\DateTime::ISO8601), new ObjectNormalizer()), [new JsonEncoder()]);
$person = $serializer->deserialize($post, Person::class, 'json');
$dm = $this->get('doctrine_mongodb')->getManager();
$dm->persist($person);
$dm->flush();
return new Response('Created id ' . $person->getId());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2014 次 |
| 最近记录: |