JMS序列化程序无法在Symfony 4上设置上下文目标属性

JMS序列化程序无法在Symfony 4上设置上下文目标属性,symfony,jms,serialization,Symfony,Jms,Serialization,我正在使用Symfony Flex 4.1.2,尝试使用JMS序列化程序更新对象实体 $userService = $this->get('user.service'); $user = $userService->findByOne(array('id' => 1)); $data = [ "spotifyAccessToken" => $accessToken ]; $context = new Deserializati

我正在使用Symfony Flex 4.1.2,尝试使用JMS序列化程序更新对象实体

   $userService = $this->get('user.service');
   $user = $userService->findByOne(array('id' => 1));

   $data = [
      "spotifyAccessToken" => $accessToken
   ];

   $context = new DeserializationContext();
   $context = $context->setAttribute('target', $user);
   $content = json_encode($data);
   $serializedData = $serializer->deserialize($content, User::class, 'json', $context);
$useruser::class的对象,我按$user、$context和$serialized data的顺序转储,输出如下

User {#498 ▼
+id: 2
+userName: "spotify:user:1199928833"
+spotifyUserId: "1199928833"
+spotifyAccessToken: "TEST"
+spotifyRefreshToken: "TEST"
+email: "TEST"
+birthday: DateTime @857174400 {#496 ▶}
+image: "TEST"
}
DeserializationContext {#502 ▼
-depth: 0
+attributes: Map {#508 ▼
#elements: array:1 [▼
  "target" => User {#498 ▼
    +id: 2
    +userName: "spotify:user:1199928833"
    +spotifyUserId: "1199928833"
    +spotifyAccessToken: "TEST"
    +spotifyRefreshToken: "TEST"
    +email: "TEST"
    +birthday: DateTime @857174400 {#496 ▶}
    +image: "TEST"
  }
]
}
-format: null
-visitor: null
-navigator: null
-metadataFactory: null
-exclusionStrategy: null
-serializeNull: null
-initialized: false
-metadataStack: null
}
User {#536 ▼
+id: null
+userName: null
+spotifyUserId: null
+spotifyAccessToken: "UPDATED_ACCESS_TOKEN"
+spotifyRefreshToken: null
+email: null
+birthday: null
+image: null
}

所以JMS没有用用户对象反序列化,我如何修复它呢?

我觉得这很好,您正在从中创建一个
用户
对象

$data = [
    "spotifyAccessToken" => $accessToken
];
因此你收到了

+id: null
+userName: null
+spotifyUserId: null
+spotifyAccessToken: "UPDATED_ACCESS_TOKEN"
+spotifyRefreshToken: null
+email: null
+birthday: null
+image: null
那么,为什么您希望有一个完整的
用户
对象呢

现在,如果您需要一个具有更新的
spotifyAccessToken
的完整
User
对象,我会执行以下操作:

$user->setSpotifyAccessToken($accessToken); // supposing you have a setter for it
$serializedUser = json_encode($user);
$unserializedUser = $serializer->deserialize($serializedUser, User::class, 'json');

我觉得很好,您正在从创建一个
User
对象

$data = [
    "spotifyAccessToken" => $accessToken
];
因此你收到了

+id: null
+userName: null
+spotifyUserId: null
+spotifyAccessToken: "UPDATED_ACCESS_TOKEN"
+spotifyRefreshToken: null
+email: null
+birthday: null
+image: null
那么,为什么您希望有一个完整的
用户
对象呢

现在,如果您需要一个具有更新的
spotifyAccessToken
的完整
User
对象,我会执行以下操作:

$user->setSpotifyAccessToken($accessToken); // supposing you have a setter for it
$serializedUser = json_encode($user);
$unserializedUser = $serializer->deserialize($serializedUser, User::class, 'json');

我们应该使用序列化程序,如果我使用它,我们不需要序列化程序,我尝试更新对象我们应该使用序列化程序,如果我使用它,我们不需要序列化程序,我尝试更新对象