diff --git a/modules/order/src/Adjustment.php b/modules/order/src/Adjustment.php
index 07f5e4c7..f047bb1b 100644
--- a/modules/order/src/Adjustment.php
+++ b/modules/order/src/Adjustment.php
@@ -7,7 +7,7 @@ use Drupal\commerce_price\Price;
 /**
  * Represents an adjustment.
  */
-final class Adjustment {
+final class Adjustment implements \IteratorAggregate {
 
   /**
    * The adjustment type.
@@ -196,4 +196,30 @@ final class Adjustment {
     return $this->locked;
   }
 
+  /**
+   * Returns all storage elements as an array.
+   *
+   * @return array
+   *   An associative array of attributes.
+   */
+  public function toArray() {
+    return [
+      'type' => $this->type,
+      'label' => $this->label,
+      'amount' => $this->amount,
+      'percentage' => $this->percentage,
+      'sourceId' => $this->sourceId,
+      'included' => $this->included,
+      'locked' => $this->locked,
+    ];
+
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIterator() {
+    return new \ArrayIterator($this->toArray());
+  }
+
 }
diff --git a/modules/price/src/Price.php b/modules/price/src/Price.php
index f036d964..60570ce4 100644
--- a/modules/price/src/Price.php
+++ b/modules/price/src/Price.php
@@ -7,7 +7,7 @@ use Drupal\commerce_price\Exception\CurrencyMismatchException;
 /**
  * Provides a value object for monetary values.
  */
-final class Price {
+final class Price implements \IteratorAggregate {
 
   /**
    * The number.
@@ -280,4 +280,11 @@ final class Price {
     }
   }
 
+  /**
+   * @inheritdoc
+   */
+  public function getIterator() {
+    return new \ArrayIterator($this->toArray());
+  }
+
 }
