我正在尝试使用带有@ExclusionPolicy的JMSSerializer更新symfony2/doctrine实体:无@Groups包含策略。如何从@Groups包含策略更新symfony2/doctrine实体JMSSerializer反序列化实体
* @Serializer\ExclusionPolicy("none")
*/
class Foo
{
/**
* @Serializer\Groups({"flag","edit"})
*/
protected $id;
/**
* @Serializer\Groups({"edit"})
*/
protected $name;
/**
* @Serializer\Groups({"flag"})
*/
protected $flag;
/**
* @Serializer\Exclude()
*/
protected $createdBy;
}
参考:http://jmsyst.com/libs/serializer/master/reference/annotations
结果为以下记录:
Foo (id:1, name:'bar', flagged:false ,created_by:123)
使用集团列入避免序列化信息我不需要(协会,斑点等连载.. ),所以当我想更新一个实体时,我只从JSON反序列化实体的更新字段。
$foo->setFlagged(true);
$data = $serializer->serialize($foo, 'json', SerializationContext::create()->setGroups(array("flag")));
result:
{id:1,flagged:true}
,当回传给应用
反序列化到实体
$foo = $serializer->deserialize($jsonFoo,'Foo','json');
result:
Foo (id:1, name:null, flagged:true, created_by:null)
问题是,当我尝试将实体合并回主义实体管理器:
$foo = $em->merge($foo);
$em->persist($foo);
$em->flush();
的导致foo试图用null更新排除的属性(name,created_by)。
如何告诉JMSSerializer或Doctrine实体管理器合并,我不想用null覆盖现有属性?
唯一的选择,我发现远远http://stackoverflow.com/questions/8726611/how-to-update-a-doctrine-entity-from-a-serialized-json这意味着绕过JMSSerializers反序列化并检查它/更新实体手动(在这个例子中是绕过setter)。 – Heyflynn 2013-05-13 15:38:41