gpt4 book ai didi

jmsserializerbundle - JMS Serializer 访问者继续默认反序列化

转载 作者:行者123 更新时间:2023-12-02 04:57:15 26 4
gpt4 key购买 nike

我已经为 JMS 序列化配置了一个访问者:

class MyHandler implements SubscribingHandlerInterface
{

public static function getSubscribingMethods()
{
return array(
array(
'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
'format' => 'json',
'type' => 'MyObject',
'method' => 'serializeContextParent',
),
);
}

public function serializeContextParent(JsonSerializationVisitor $visitor, $data, array $type, Context $context)
{
if (in_array('id', $type['params']))
return $data->getId();

// Do default deserialization ???
}

}

我只想在有参数 id 时反序列化 MyObject 的 id(因此声明的类型是 @JMS\Type("MyObject<'id'>")。

这很好,但是,如果找不到参数,我想继续默认的反序列化。

这可能吗?

谢谢

最佳答案

针对特殊情况简单地使用不同的对象类型:

class MyObject {
/**
* @var User
* @JMS\Type("User")
* /
protected $user;
/**
* @var User
* @JMS\Type("UserWithId")
* /
protected $userWithId;
}

处理程序可以是:

class MyHandler implements SubscribingHandlerInterface
{

public static function getSubscribingMethods()
{
return array(
array(
'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
'format' => 'json',
'type' => 'UserWithId',
'method' => 'serializeContextParent',
),
);
}

public function serializeContextParent(JsonSerializationVisitor $visitor, $data, array $type, Context $context)
{
return $data->getId();
}

}

因为您知道用户是否有 ID(您使用的是类型参数),所以您可以只使用自定义类型名称。

...并且由于可以在自定义类型上添加自定义处理程序,该解决方案应该有效

关于jmsserializerbundle - JMS Serializer 访问者继续默认反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20489479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com