jms序列化程序包序列化超类

时间:2015-02-12 10:23:15

标签: symfony jmsserializerbundle

我使用jms序列化程序包来序列化一个超类,但我想像这样序列化我的超类:

/**
 * @Discriminator(field = "type", map = {"vehicle": "Vehicle", "car": "Car", "moped": "Moped"})
 */
class Vehicle { }
class Car extends Vehicle { }
class Moped extends Vehicle { }

但是它不起作用我可以在我的json中为儿童而不是我的超类车辆中的'类型'。 对于即时我使用黑客:

$data = $this->serializer->serialize($vehicle, 'json');
if(!strpos(",\"type\":", $data))
{
    $data = substr_replace($data ,",\"type\":\"vehicle\"}",-1);
}

添加我的字段,然后可以反序列化我的对象。

你对此有什么更清晰的想法吗?

1 个答案:

答案 0 :(得分:1)

根据文件:

  

@Discriminator   此注释允许反关系的反序列化   这是多态的,但存在公共基类。的的   @Discriminator注释必须应用于最小超类型。

所以我担心你无能为力。但是,我想我会这样做(有点略微清洁):

if (($decoded = json_decode($data)) && !isset($decoded->type)) {
    $decoded->type = 'vehicle';
    $data = json_encode($decoded);
}

我认为至少更可靠。我希望它有所帮助!