【问题标题】:jms serializer bundle serialize super classjms 序列化程序捆绑序列化超类
【发布时间】:2015-02-12 10:23:14
【问题描述】:

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

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

但它不起作用,我可以在我的 json 中为孩子输入“类型”,但不适用于我的超类 Vehicle。 我立即使用 hack:

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

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

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

【问题讨论】:

    标签: symfony jmsserializerbundle


    【解决方案1】:

    根据文档:

    @判别器 此注释允许对关系进行反序列化 它们是多态的,但存在公共基类。 该 @Discriminator 注解必须应用于最少的超类型。

    所以恐怕您对此无能为力。但是,我想我会这样做(稍微干净一些):

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

    至少我认为更可靠。希望对你有帮助!

    【讨论】:

    • 好吧,这比简单的字符串替换要好得多,我总是害怕向对象添加一些参数,而不是在 symfony2 的实体类中。但是我不知道为什么 jms 鉴别器不能作为 ORM 鉴别器。
    猜你喜欢
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多