diff --git a/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php b/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
index d1beeeb..e781d5b 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
@@ -62,7 +62,15 @@ protected function doCreate(array $values) {
       if (!isset($values[$this->bundleKey])) {
         throw new EntityStorageException(String::format('Missing bundle for entity type @type', array('@type' => $this->entityTypeId)));
       }
+
       $bundle = $values[$this->bundleKey];
+
+      // The bundle could be a string or it might a field based structure.
+      // We can rely on it being a single string,
+      // so remove all wrapping arrays until we have that string.
+      while (is_array($bundle)) {
+        $bundle = reset($bundle);
+      }
     }
     $entity = new $this->entityClass(array(), $this->entityTypeId, $bundle);
 
diff --git a/core/modules/serialization/src/Normalizer/EntityNormalizer.php b/core/modules/serialization/src/Normalizer/EntityNormalizer.php
index 5e81b5a..79d9c84 100644
--- a/core/modules/serialization/src/Normalizer/EntityNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/EntityNormalizer.php
@@ -50,14 +50,6 @@ public function denormalize($data, $class, $format = NULL, array $context = arra
 
     $entity_type = $this->entityManager->getDefinition($context['entity_type']);
 
-    // The bundle property behaves differently from other entity properties.
-    // i.e. the nested structure with a 'value' key does not work.
-    if ($entity_type->hasKey('bundle')) {
-      $bundle_key = $entity_type->getKey('bundle');
-      $type = $data[$bundle_key][0]['value'];
-      $data[$bundle_key] = $type;
-    }
-
     return $this->entityManager->getStorage($context['entity_type'])->create($data);
   }
 
diff --git a/core/modules/serialization/tests/src/Unit/Normalizer/EntityNormalizerTest.php b/core/modules/serialization/tests/src/Unit/Normalizer/EntityNormalizerTest.php
index 652c650..7e83433 100644
--- a/core/modules/serialization/tests/src/Unit/Normalizer/EntityNormalizerTest.php
+++ b/core/modules/serialization/tests/src/Unit/Normalizer/EntityNormalizerTest.php
@@ -109,31 +109,16 @@ public function testDenormalizeWithBundle() {
     );
 
     $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
-    $entity_type->expects($this->once())
-      ->method('hasKey')
-      ->with('bundle')
-      ->will($this->returnValue(TRUE));
-    $entity_type->expects($this->once())
-      ->method('getKey')
-      ->with('bundle')
-      ->will($this->returnValue('test_type'));
 
     $this->entityManager->expects($this->once())
       ->method('getDefinition')
       ->with('test')
       ->will($this->returnValue($entity_type));
 
-    // The expected test data should have a modified test_type property.
-    $expected_test_data = array(
-      'key_1' => 'value_1',
-      'key_2' => 'value_2',
-      'test_type' => 'test_bundle',
-    );
-
     $storage = $this->getMock('Drupal\Core\Entity\EntityStorageInterface');
     $storage->expects($this->once())
       ->method('create')
-      ->with($expected_test_data)
+      ->with($test_data)
       ->will($this->returnValue($this->getMock('Drupal\Core\Entity\EntityInterface')));
 
     $this->entityManager->expects($this->once())
@@ -156,12 +141,6 @@ public function testDenormalizeWithNoBundle() {
     );
 
     $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
-    $entity_type->expects($this->once())
-      ->method('hasKey')
-      ->with('bundle')
-      ->will($this->returnValue(FALSE));
-    $entity_type->expects($this->never())
-      ->method('getKey');
 
     $this->entityManager->expects($this->once())
       ->method('getDefinition')
