diff --git a/src/Encoder/ObjectEncoder.php b/src/Encoder/ObjectEncoder.php
index 995ebe5..81bc5df 100644
--- a/src/Encoder/ObjectEncoder.php
+++ b/src/Encoder/ObjectEncoder.php
@@ -103,7 +103,7 @@ static function (string $normalizePropertyName, Property $property) use ($object
$iso = $objectAccess->isos[$normalizePropertyName];
return match(true) {
- $isAttribute => $value ? (new AttributeBuilder(
+ $isAttribute => $value !== null ? (new AttributeBuilder(
$type,
$iso->to($value)
))(...) : $defaultAction,
diff --git a/tests/Unit/Encoder/ObjectEncoderTest.php b/tests/Unit/Encoder/ObjectEncoderTest.php
index 6e2a96a..b6f9fc3 100644
--- a/tests/Unit/Encoder/ObjectEncoderTest.php
+++ b/tests/Unit/Encoder/ObjectEncoderTest.php
@@ -109,6 +109,23 @@ public static function provideIsomorphicCases(): iterable
'xml' => 'green',
'data' => new User(active: true, hat: new Hat('green')),
];
+ yield 'with-falsy-attribute' => [
+ ...$baseConfig,
+ 'context' => self::createContext($xsdType, self::buildTypes(activeAsAttribute: true)),
+ 'xml' => 'green',
+ 'data' => (object)[
+ 'active' => false,
+ 'hat' => (object)[
+ 'color' => 'green',
+ ],
+ ],
+ ];
+ yield 'class-objects-with-falsy-attribute' => [
+ 'encoder' => new ObjectEncoder(User::class),
+ 'context' => $withClassMap(self::createContext($xsdType, self::buildTypes(activeAsAttribute: true))),
+ 'xml' => 'green',
+ 'data' => new User(active: false, hat: new Hat('green')),
+ ];
yield 'wsdl-example-objects' => [
...$baseConfig,