diff --git a/core/modules/layout_builder/layout_builder.services.yml b/core/modules/layout_builder/layout_builder.services.yml
index 4fe50929bd..af402de1e4 100644
--- a/core/modules/layout_builder/layout_builder.services.yml
+++ b/core/modules/layout_builder/layout_builder.services.yml
@@ -39,3 +39,11 @@ services:
   logger.channel.layout_builder:
     parent: logger.channel_base
     arguments: ['layout_builder']
+  layout_builder.normalizer.section_data:
+    class: Drupal\layout_builder\Normalizer\SectionDataNormalizer
+    tags:
+      - { name: normalizer, priority: 1 }
+  layout_builder.normalizer.layout_section_item:
+    class: Drupal\layout_builder\Normalizer\LayoutSectionItemNormalizer
+    tags:
+      - { name: normalizer, priority: 9 }
diff --git a/core/modules/layout_builder/src/Normalizer/LayoutSectionItemNormalizer.php b/core/modules/layout_builder/src/Normalizer/LayoutSectionItemNormalizer.php
new file mode 100644
index 0000000000..90ae3583cc
--- /dev/null
+++ b/core/modules/layout_builder/src/Normalizer/LayoutSectionItemNormalizer.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace Drupal\layout_builder\Normalizer;
+
+use Drupal\layout_builder\Plugin\DataType\SectionData;
+use Drupal\layout_builder\Plugin\Field\FieldType\LayoutSectionItem;
+use Drupal\serialization\Normalizer\FieldItemNormalizer;
+
+/**
+ * Normalizes section lists.
+ */
+class LayoutSectionItemNormalizer extends FieldItemNormalizer {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $supportedInterfaceOrClass = LayoutSectionItem::class;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function denormalize($data, $class, $format = NULL, array $context = []) {
+    /** @var \Drupal\layout_builder\Plugin\DataType\SectionData $section_data */
+    $section_data = $this->serializer->denormalize($data['section'], SectionData::class, $format, $context);;
+    return parent::denormalize($section_data->getValue(), $class, $format, $context);
+  }
+
+}
diff --git a/core/modules/layout_builder/src/Normalizer/SectionDataNormalizer.php b/core/modules/layout_builder/src/Normalizer/SectionDataNormalizer.php
new file mode 100644
index 0000000000..74d1e94552
--- /dev/null
+++ b/core/modules/layout_builder/src/Normalizer/SectionDataNormalizer.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace Drupal\layout_builder\Normalizer;
+
+use Drupal\layout_builder\Plugin\DataType\SectionData;
+use Drupal\layout_builder\Section;
+use Drupal\serialization\Normalizer\TypedDataNormalizer;
+use Symfony\Component\Serializer\Exception\InvalidArgumentException;
+use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
+
+/**
+ * Normalizes section data.
+ */
+class SectionDataNormalizer extends TypedDataNormalizer implements DenormalizerInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $supportedInterfaceOrClass = SectionData::class;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function normalize($object, $format = NULL, array $context = []) {
+    return $object->getValue()->toArray();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function denormalize($data, $class, $format = null, array $context = []) {
+    if (!isset($context['target_instance'])) {
+      throw new InvalidArgumentException('$context[\'target_instance\'] must be set to denormalize with the SectionDataNormalizer');
+    }
+
+    /** @var \Drupal\Core\Field\FieldItemInterface $field_item */
+    $target_instance = $context['target_instance'];
+
+    $object = SectionData::createInstance($target_instance->getDataDefinition());
+    $section = Section::fromArray($data);
+    $object->setValue($section);
+    return $object;
+  }
+
+}
