Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony:如何反序列化包含一组对象的JSON文件,这些对象的属性由一组对象组成?_Php_Api_Symfony_Json Deserialization_Json Serialization - Fatal编程技术网

Php Symfony:如何反序列化包含一组对象的JSON文件,这些对象的属性由一组对象组成?

Php Symfony:如何反序列化包含一组对象的JSON文件,这些对象的属性由一组对象组成?,php,api,symfony,json-deserialization,json-serialization,Php,Api,Symfony,Json Deserialization,Json Serialization,在Symfony中,我尝试从JSON文件反序列化一组“Activity”类型的对象。每个对象活动都包含三个属性: Intger Id 类类型为“Person”的属性称为“host” 类类型为“Person”的对象数组称为“participants” 我尝试了一个Symfony制作的反序列化程序来反序列化Person类型的对象,效果很好。但当我试图用它来反序列化Activity类型的对象时,它给了我一个错误。 $serializer=新的序列化程序( [新建GetSetMethodNorma

在Symfony中,我尝试从JSON文件反序列化一组“Activity”类型的对象。每个对象活动都包含三个属性:

  • Intger Id
  • 类类型为“Person”的属性称为“host”
  • 类类型为“Person”的对象数组称为“participants”
  • 我尝试了一个Symfony制作的反序列化程序来反序列化Person类型的对象,效果很好。但当我试图用它来反序列化Activity类型的对象时,它给了我一个错误。

    $serializer=新的序列化程序(
    [新建GetSetMethodNormalizer(),新建ArrayNormalizer()],
    [新的JSONECODER()]
    );
    $members=$serializer->反序列化($json,'ActivitiesBundle\Entity\Person[],'json');
    
    另一个无法提取数据:

    $activities=$serializer->反序列化($json,
    “ActivitiesBundle\Entity\Activity[]”,“json”);
    
    课堂活动
    {
    私人$id;
    私人$主机;
    私人$参与者=[];
    公共函数getId()
    {
    返回$this->id;
    }
    公共函数setId($id)
    {
    $this->id=$id;
    退还$this;
    }
    公共函数getHost(){
    返回$this->host;
    }
    公共函数setHost(Person$host){
    $this->host=$host;
    退还$this;
    }
    公共功能{
    返回$this->参与者;
    }
    公共函数集合参与者(\Person…$participants){
    $this->participants=$participants;
    退还$this;
    }
    }
    
    班级人员
    {
    私人$id;
    私人$name;
    公共函数getId()
    {
    返回$this->id;
    }
    公共函数setId($id)
    {
    $this->id=$id;
    退还$this;
    }
    公共函数getName(){
    返回$this->name;
    }
    公共函数setName($name){
    $this->name=$name;
    退还$this;
    }
    }
    
    我得到的错误是:

    Type error: Argument 1 passed to ActivitiesBundle\Entity\Activity::setHost() must be an instance of ActivitiesBundle\Entity\Person
    数组反序列化(人员数组)的错误消息是什么?另外,您没有向我们展示一个简单的json示例,据我们所知,json在您的特定情况下可能无效。例如,
    {“host”:“John”}
    可能会导致此错误……我将该反序列化程序与另一个只包含人员列表的JSON文件一起使用,效果良好。
    [
        {
            "id": 1,
            "host": {
                "id": 48,
                "name": "Name48",
            },
            "participants": [
                {
                    "id": 975,
                    "name": "Name975",
                },
                {
                    "id": 866,
                    "name": "Name866",
                },
                {
                    "id": 355,
                    "name": "Name355",
                },
                {
                    "id": 856,
                    "name": "Name856",
                }
            ]
        },
        {
            "id": 2,
            "host": {
                        .....