only in patch2: unchanged: --- a/commerce.services.yml +++ b/commerce.services.yml @@ -64,3 +64,10 @@ services: plugin.manager.commerce_entity_trait: class: Drupal\commerce\EntityTraitManager arguments: ['@container.namespaces', '@cache.discovery', '@module_handler', '@commerce.configurable_field_manager'] + serializer.normalizer.object: + class: Drupal\commerce\Normalizer\ObjectAnyNormalizer + tags: + # This normalizer must be higher than serializer.normalizer.typed_data + # So setting priority as 0 here. + # @see \Drupal\commerce\Normalizer\ObjectAnyNormalizer::supportsNormalization + - { name: normalizer, priority: 0} only in patch2: unchanged: --- /dev/null +++ b/src/Normalizer/ObjectAnyNormalizer.php @@ -0,0 +1,50 @@ +getValue(); + if (isset($value) && is_object($value) && $value instanceof Adjustment) { + return TRUE; + } + } + return FALSE; + } + + /** + * {@inheritdoc} + */ + public function normalize($object, $format = NULL, array $context = []) { + $value = $object->getValue(); + // If the value is object or array, return the normalized result, object + // must be typed data or traversable to be normalizable. + if (isset($value) && (is_object($value) || is_array($value))) { + $value = $this->serializer->normalize($value, $format, $context); + } + return $value; + } + +}