 .../Normalizer/EntityReferenceItemNormalizer.php   | 31 +++++++++++++++++++---
 1 file changed, 27 insertions(+), 4 deletions(-)

diff --git a/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php b/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php
index 7c1943a..2f86e66 100644
--- a/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php
+++ b/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php
@@ -86,7 +86,7 @@ public function normalize($field_item, $format = NULL, array $context = array())
     $field_name = $field_item->getParent()->getName();
     $entity = $field_item->getEntity();
     $field_uri = $this->linkManager->getRelationUri($entity->getEntityTypeId(), $entity->bundle(), $field_name, $context);
-    return array(
+    $normalized =array(
       '_links' => array(
         $field_uri => array($link),
       ),
@@ -94,6 +94,23 @@ public function normalize($field_item, $format = NULL, array $context = array())
         $field_uri => array($embedded),
       ),
     );
+
+    $values = $field_item->toArray();
+    if (isset($context['langcode'])) {
+      $values['lang'] = $context['langcode'];
+    }
+    $exclude_properties = array(
+      $entity->getEntityType()->getKey('id'),
+      $entity->getEntityType()->getKey('revision'),
+      'target_id',
+    );
+    foreach ($values as $property_name => $value) {
+      if (!in_array($property_name, $exclude_properties)) {
+        $normalized['_embedded'][$field_uri][0][$property_name] = $value;
+      }
+    }
+
+    return $normalized;
   }
 
   /**
@@ -103,9 +120,15 @@ protected function constructValue($data, $context) {
     $field_item = $context['target_instance'];
     $field_definition = $field_item->getFieldDefinition();
     $target_type = $field_definition->getSetting('target_type');
-    $id = $this->entityResolver->resolve($this, $data, $target_type);
-    if (isset($id)) {
-      return array('target_id' => $id);
+    if ($id = $this->entityResolver->resolve($this, $data, $target_type)) {
+      $constrcuted = array('target_id' => $id);
+      $property_names = method_exists($field_definition, 'getPropertyNames') ? $field_definition->getPropertyNames() : $field_definition->getFieldStorageDefinition()->getPropertyNames();
+      foreach ($property_names as $property_name) {
+        if (isset($data[$property_name])) {
+          $constrcuted[$property_name] = $data[$property_name];
+        }
+      }
+      return $constrcuted;
     }
     return NULL;
   }
