首页 > 解决方案 > 如何让 JMS/Serializer 将此属性反序列化为对象?

问题描述

我有以下课程

use JMS\Serializer\Annotation as Serializer;
use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Type;

/**
 * @ExclusionPolicy("none")
 */
class SalesOrderGetResponse
{
    /**
     * @Type("array<Vendor\Module\Model\SalesOrder>")
     * @var SalesOrder[]
     */
    public $mvSalesOrders = [];

    /**
     * @Serializer\Type("Vendor\Module\Model\SalesOrderGetResponseStatus")
     * @var SalesOrderGetResponseStatus
     */
    public $ResponseStatus;

}

而这堂课

use JMS\Serializer\Annotation as Serializer;

/**
 * @Serializer\ExclusionPolicy("none")
 */
class SalesOrderGetResponseStatus
{
 
    const ERROR_CODE_SUCCESS = 0;

    /**
     * @Serializer\Type("string")
     * @var string
     */
    public $ErrorCode;
}

我正在尝试使用 JMS 序列化程序作为独立库将以下 JSON 对象反序列化为一个类。

{
  "mvSalesOrders": [
  ],
  "ResponseStatus": {
    "ErrorCode": "0"
  }
}

像这样

        $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
        $encoders = [new JsonEncoder()];
        $normalizers = [new ObjectNormalizer($classMetadataFactory)];

        $serializer = new \Symfony\Component\Serializer\Serializer($normalizers, $encoders);

        $result = new SalesOrderGetResponse();
        $serializer->deserialize($resultJson, SalesOrderGetResponse::class, 'json', [AbstractNormalizer::OBJECT_TO_POPULATE => $result]);

但是,当我得到反序列化的结果时, ResponseStatus 属性始终是一个数组而不是类的实例SalesOrderGetResponseStatus

在此处输入图像描述

我在这里想念什么?

标签: phpdeserializationjms-serializer

解决方案


推荐阅读