diff --git a/abstractions/php/src/Serialization/ParseNode.php b/abstractions/php/src/Serialization/ParseNode.php index ce4f2b7ba8..cfa07a0900 100644 --- a/abstractions/php/src/Serialization/ParseNode.php +++ b/abstractions/php/src/Serialization/ParseNode.php @@ -8,6 +8,7 @@ use Microsoft\Kiota\Abstractions\Types\Byte; use Microsoft\Kiota\Abstractions\Types\Date; use Microsoft\Kiota\Abstractions\Types\Time; +use Psr\Http\Message\StreamInterface; interface ParseNode { /** @@ -98,6 +99,11 @@ public function getEnumValue(string $targetEnum): ?Enum; */ public function getByteValue(): ?Byte; + /** + * Get a Stream from node. + * @return StreamInterface|null + */ + public function getBinaryContent(): ?StreamInterface; /** * Gets the callback called before the node is deserialized. * @return callable the callback called before the node is deserialized. diff --git a/serialization/php/json/src/JsonParseNode.php b/serialization/php/json/src/JsonParseNode.php index 2fc6fe4e7f..6f31eb9547 100644 --- a/serialization/php/json/src/JsonParseNode.php +++ b/serialization/php/json/src/JsonParseNode.php @@ -122,19 +122,26 @@ private function assignFieldValues($result): void { if (is_a($result, Parsable::class)){ $fieldDeserializers = $result->getFieldDeserializers(); } - + $isAdditionalDataHolder = false; + $additionalData = []; + if (is_a($result, AdditionalDataHolder::class)) { + $isAdditionalDataHolder = true; + $additionalData = $result->getAdditionalData(); + } foreach ($this->jsonNode as $key => $value){ $deserializer = $fieldDeserializers[$key] ?? null; if ($deserializer !== null){ $deserializer($result, new JsonParseNode($value)); - } else if (is_a($result, AdditionalDataHolder::class)) { - $data = $result->getAdditionalData(); + } else { $key = (string)$key; - $data[$key] = $value; - $result->setAdditionalData($data); + $additionalData[$key] = $value; } } + + if ( $isAdditionalDataHolder ) { + $result->setAdditionalData($additionalData); + } } /**