diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
index d3ed49f..4f32e3c 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
@@ -537,6 +537,8 @@ protected function loadFromSharedTables(array &$values, array &$translations) {
         $fields = $table_mapping->getFieldNames($this->dataTable);
       }
 
+      $storage_definitions = $this->entityManager->getFieldStorageDefinitions($this->entityTypeId);
+
       $result = $query->execute();
       foreach ($result as $row) {
         $id = $row[$this->idKey];
@@ -548,14 +550,19 @@ protected function loadFromSharedTables(array &$values, array &$translations) {
         $translations[$id][$langcode] = TRUE;
 
         foreach ($fields as $field_name) {
+          $storage_definition = $storage_definitions[$field_name];
+          $definition_columns = $storage_definition->getColumns();
           $columns = $table_mapping->getColumnNames($field_name);
           // Do not key single-column fields by property name.
           if (count($columns) == 1) {
-            $values[$id][$field_name][$langcode] = $row[reset($columns)];
+            $column_name = reset($columns);
+            $column_attributes = $definition_columns[key($columns)];
+            $values[$id][$field_name][$langcode] = (!empty($column_attributes['serialize'])) ? unserialize($row[$column_name]) : $row[$column_name];
           }
           else {
             foreach ($columns as $property_name => $column_name) {
-              $values[$id][$field_name][$langcode][$property_name] = $row[$column_name];
+              $column_attributes = $definition_columns[$property_name];
+              $values[$id][$field_name][$langcode][$property_name] = (!empty($column_attributes['serialize'])) ? unserialize($row[$column_name]) : $row[$column_name];
             }
           }
         }
