You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
With the update of Serializer to 6.3.5, some deserialization of array to objects does behave differently (changed order of priority of configuration via attribute #[SerializedPath] vs. property name, when there is a key on root level with the same name as the private property.
Before 6.3.5, the value of the id was id-1, with the change of #49700, the value of the id becomes id-2.
#49700 changes array_merge with array + array. It seems that the problem stated above is related to the fact that array_merge does overwrite keys differently than array + array:
This PR was merged into the 6.3 branch.
Discussion
----------
Fix order array sum normalizedData and nestedData
| Q | A
| ------------- | ---
| Branch? | 6.3
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | #51823
| License | MIT
### Description
With the update of Serializer to 6.3.5, some deserialization of array to objects does behave differently (changed order of priority of configuration via attribute `#[SerializedPath]` vs. property name, when there is a key on root level with the same name as the private property.
Related to #49700.
### How to reproduce
Example to explain changed behavior:
```json
{
"data": {
"item": {
"id": "id-1"
}
},
"id": "id-2"
}
```
```php
final class SomeEvent
{
#[SerializedPath('[data][item][id]')]
public string $id;
}
```
Before 6.3.5, the value of the id was `id-1`, with the change of #49700, the value of the id becomes `id-2`.
#49700 changes `array_merge` with `array + array`. It seems that the problem stated above is related to the fact that array_merge does overwrite keys differently than array + array:
```php
$a = ['key' => 'value-a'];
$b = ['key' => 'value-b'];
var_dump(array_merge($a, $b));
// Results in:
// array(1) {
// ["key"]=>
// string(7) "value-b"
// }
var_dump($a + $b);
// Results in:
// array(1) {
// ["key"]=>
// string(7) "value-a"
// }
```
### Solution
As `array_merge` does behave slightly differently that array + array, the solution could be to switch array order to:
```diff
- $normalizedData = $normalizedData + $nestedData;
+ $normalizedData = $nestedData + $normalizedData;
```
This would result in the same, while keeping the fix (#49700) for the numeric key value
Commits
-------
67f49d4 Fix order array sum normalizedData and nestedData
Symfony version(s) affected
6.3.5
Description
With the update of Serializer to 6.3.5, some deserialization of array to objects does behave differently (changed order of priority of configuration via attribute
#[SerializedPath]
vs. property name, when there is a key on root level with the same name as the private property.Related to #49700.
How to reproduce
Example to explain changed behavior:
Before 6.3.5, the value of the id was
id-1
, with the change of #49700, the value of the id becomesid-2
.#49700 changes
array_merge
witharray + array
. It seems that the problem stated above is related to the fact that array_merge does overwrite keys differently than array + array:Possible Solution
As
array_merge
does behave slightly differently that array + array, the solution could be to switch array order to:This would result in the same, while keeping the fix (#49700) for the numeric key value.
PR: #51825
Additional Context
No response
The text was updated successfully, but these errors were encountered: