diff --git a/core/modules/language/migration_templates/default_language.yml b/core/modules/language/migration_templates/default_language.yml
index d7e52ad..7af3f9c 100644
--- a/core/modules/language/migration_templates/default_language.yml
+++ b/core/modules/language/migration_templates/default_language.yml
@@ -10,9 +10,21 @@ source:
 process:
   default_langcode:
     -
-      plugin: callback
-      callable: get_object_vars
+      plugin: default_value
       source: language_default
+      default_value:
+        'language': 'en'
+    # Let's encode and decode to get rid of the default language stdClass.
+    -
+      plugin: callback
+      callable:
+        - '\Drupal\Component\Serialization\Json'
+        - 'encode'
+    -
+      plugin: callback
+      callable:
+        - '\Drupal\Component\Serialization\Json'
+        - 'decode'
     -
       plugin: extract
       index:
diff --git a/core/modules/language/tests/src/Kernel/Migrate/MigrateDefaultLanguageTrait.php b/core/modules/language/tests/src/Kernel/Migrate/MigrateDefaultLanguageTrait.php
index deb6020..14c2a7c 100644
--- a/core/modules/language/tests/src/Kernel/Migrate/MigrateDefaultLanguageTrait.php
+++ b/core/modules/language/tests/src/Kernel/Migrate/MigrateDefaultLanguageTrait.php
@@ -38,7 +38,7 @@ protected function doTestMigration($langcode, $existing = TRUE) {
       // default_langcode config should be set.
       $default_language = ConfigurableLanguage::load($langcode);
       $this->assertNotNull($default_language);
-      $this->assertIdentical($langcode, $this->config('system.site')->get('default_langcode'));
+      $this->assertSame($langcode, $this->config('system.site')->get('default_langcode'));
     }
     else {
       // Otherwise, the migration log should contain an error message.
@@ -46,11 +46,31 @@ protected function doTestMigration($langcode, $existing = TRUE) {
       $count = 0;
       foreach ($messages as $message) {
         $count++;
-        $this->assertEqual($message->message, "The language '$langcode' does not exist on this site.");
-        $this->assertEqual($message->level, MigrationInterface::MESSAGE_ERROR);
+        $this->assertSame($message->message, "The language '$langcode' does not exist on this site.");
+        $this->assertSame((int) $message->level, MigrationInterface::MESSAGE_ERROR);
       }
-      $this->assertEqual($count, 1);
+      $this->assertSame($count, 1);
     }
   }
 
+  /**
+   * Helper method to test the migration with unset variable.
+   */
+  protected function doTestMigrationWithUnsetVariable() {
+    // Delete the language_default variable.
+    $this->sourceDatabase->delete('variable')
+      ->condition('name', 'language_default' )
+      ->execute();
+
+    $this->startCollectingMessages();
+    $this->executeMigrations(['language', 'default_language']);
+    $messages = $this->migration->getIdMap()->getMessageIterator()->fetchAll();
+
+    // Make sure there's no migration exceptions.
+    $this->assertEmpty($messages);
+
+    // Make sure the default langcode is 'en', since it was the default on D6 & D7.
+    $this->assertSame('en', $this->config('system.site')->get('default_langcode'));
+  }
+
 }
diff --git a/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateDefaultLanguageTest.php b/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateDefaultLanguageTest.php
index 20beb96..645af29 100644
--- a/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateDefaultLanguageTest.php
+++ b/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateDefaultLanguageTest.php
@@ -33,4 +33,11 @@ public function testMigrationWithNonExistentLanguage() {
     $this->doTestMigration('tv', FALSE);
   }
 
+  /**
+   * Tests language_default migration with unset variable.
+   */
+  public function testMigrationWithUnsetVariable() {
+    $this->doTestMigrationWithUnsetVariable();
+  }
+
 }
diff --git a/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateDefaultLanguageTest.php b/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateDefaultLanguageTest.php
index 0e584e5..79769bc 100644
--- a/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateDefaultLanguageTest.php
+++ b/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateDefaultLanguageTest.php
@@ -33,4 +33,11 @@ public function testMigrationWithNonExistentLanguage() {
     $this->doTestMigration('tv', FALSE);
   }
 
+  /**
+   * Tests language_default migration with unset variable.
+   */
+  public function testMigrationWithUnsetVariable() {
+    $this->doTestMigrationWithUnsetVariable();
+  }
+
 }
