diff --git a/src/marshmallow_union/__init__.py b/src/marshmallow_union/__init__.py
index 69e3099..b3b86e1 100644
--- a/src/marshmallow_union/__init__.py
+++ b/src/marshmallow_union/__init__.py
@@ -59,9 +59,22 @@ class Union(marshmallow.fields.Field):
         for candidate_field in fields:
 
             try:
-                return candidate_field.serialize(
-                    attr, obj, error_store=error_store, **kwargs
-                )
+                try:
+                    return candidate_field.serialize(
+                        attr, obj, error_store=error_store, **kwargs
+                    )
+                except TypeError:
+                    # When serialising a mapping (eg dict) value item, 'attr' and 'obj'
+                    # is none (as a dict value is not an attribute of anything). This
+                    # causes issues with the attribute-get methods within
+                    # 'marshmallow', but can be bypassed by passing the known 'value'
+                    # directly to '_serialize'
+                    if attr is obj is None:
+                        # pylint: disable=protected-access
+                        return candidate_field._serialize(
+                            value, attr, obj, **kwargs
+                        )
+                    raise
             # pylint: disable=broad-except
             except Exception as exc:
                 pass

Support union for mapping value
When using a union for a mapping value-type, marshmallow-union raises `ExceptionGroup` during serialisation.

All candidate fields raise as marshmallow-union calls `schema.serialise(attr, obj, ...)`. However, inside a mapping value-type, marshmallow calls `schema._serialise(value, None, None)`, as the mapping values are not part of the serialised object.

### Reproduction
```python
import typing as t
import dataclasses
import marshmallow
import marshmallow_dataclass

@marshmallow_dataclass.dataclass
class Foo:
    bar: t.Dict[str, t.Union[int, str]] = dataclasses.field(default_factory=dict)

obj = Foo(bar={"spam": "eggs", "ham": 42})
schema = Foo.Schema()
schema.dump(obj)
```

### Expected
```python
{'bar': {'spam': 'eggs', 'ham': 42}}
```

### Actual
```python
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "~/env-tmp/lib/python3.7/site-packages/marshmallow/schema.py", line 553, in dump
    result = self._serialize(processed_obj, many=many)
  File "~/env-tmp/lib/python3.7/site-packages/marshmallow/schema.py", line 517, in _serialize
    value = field_obj.serialize(attr_name, obj, accessor=self.get_attribute)
  File "~/env-tmp/lib/python3.7/site-packages/marshmallow/fields.py", line 325, in serialize
    return self._serialize(value, attr, obj, **kwargs)
  File "`/env-tmp/lib/python3.7/site-packages/marshmallow/fields.py", line 1510, in _serialize
    result[keys[k]] = self.value_field._serialize(v, None, None, **kwargs)
  File "~/env-tmp/lib/python3.7/site-packages/marshmallow_union/__init__.py", line 69, in _serialize
    raise ExceptionGroup("All serializers raised exceptions.\n", error_store.errors)
marshmallow_union.ExceptionGroup: ('All serializers raised exceptions.\n', {})
```

### Environment
* OS: Ubuntu 19:10
* Python: 3.7.5
* marshmallow: 3.2.2
* marshmallow-union: 0.1.12
* marshmallow-dataclass: 7.1
diff --git a/tests/test_union.py b/tests/test_union.py
index 10e6066..c4ffd4f 100644
--- a/tests/test_union.py
+++ b/tests/test_union.py
@@ -32,6 +32,19 @@ class OtherSchema(marshmallow.Schema):
     )
 
 
+class MappingSchema(marshmallow.Schema):
+    """Schema with union inside mapping."""
+    items = marshmallow.fields.Dict(
+        marshmallow.fields.String(),
+        marshmallow_union.Union(
+            [
+                marshmallow.fields.Integer(),
+                marshmallow.fields.List(marshmallow.fields.Integer()),
+            ],
+        ),
+    )
+
+
 class StrIntSchema(marshmallow.Schema):
     """Schema with str and int candidates."""
 
@@ -46,6 +59,7 @@ class StrIntSchema(marshmallow.Schema):
         ({"name": "Alice", "number_or_numbers": [25, 50]}, OtherSchema()),
         ({"x": 5}, StrIntSchema()),
         ({"x": "hello"}, StrIntSchema()),
+        ({"items": {"a": 42, "b": [17]}}, MappingSchema()),
     ],
 )
 def test_round_trip(data, schema):
@@ -60,6 +74,7 @@ def test_round_trip(data, schema):
     [
         ({"name": "Alice", "number_or_numbers": "twenty-five"}, PersonSchema()),
         ({"name": "Alice", "number_or_numbers": {"x": 14}}, PersonSchema()),
+        ({"items": {"a": 42, "b": "spam"}}, MappingSchema()),
     ],
 )
 def test_raises(data, schema):

pip install -e .[dev]
parse_log_pytest_v2
requirements.txt
apt-get update apt-get install -y gcc
3.7
requirements.txt dev-requirements.txt
pytest -xvs
ansicolors==1.0.2
appdirs==1.4.3
argh==0.26.2
astroid==2.2.5
atomicwrites==1.3.0
attrs==19.1.0
black==19.3b0
bleach==3.1.0
bump2version==0.5.10
certifi @ file:///croot/certifi_1671487769961/work/certifi
check-manifest==0.39
Click==7.0
coverage==4.5.3
cuvner==18.0.1
docutils==0.14
filelock==3.0.12
importlib-metadata==0.17
incremental==17.5.0
isort==4.3.20
Jinja2==2.10.1
lazy-object-proxy==1.4.1
MarkupSafe==1.1.1
marshmallow==3.2.1
-e git+https://github.com/adamboche/python-marshmallow-union.git@49f82a94403b686e56c4509cf75bca40a9dfe23a#egg=marshmallow_union
mccabe==0.6.1
more-itertools==7.0.0
mypy==0.701
mypy-extensions==0.4.1
packaging==19.0
pathtools==0.1.2
pex==1.6.7
pluggy==0.12.0
py==1.8.0
Pygments==2.4.2
pylint==2.3.1
pyparsing==2.4.0
pytest==4.6.2
pytest-sphinx==0.2.2
PyYAML==5.1.1
readme-renderer==24.0
six==1.12.0
toml==0.10.0
towncrier==19.2.0
tox==3.12.1
typed-ast==1.3.5
unidiff==0.5.5
versioneer==0.18
virtualenv==16.6.0
watchdog==0.9.0
wcwidth==0.1.7
webencodings==0.5.1
wrapt==1.11.1
zipp==0.5.1

name: python-marshmallow-union
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - ansicolors==1.0.2
      - appdirs==1.4.3
      - argh==0.26.2
      - astroid==2.2.5
      - atomicwrites==1.3.0
      - attrs==19.1.0
      - black==19.3b0
      - bleach==3.1.0
      - bump2version==0.5.10
      - check-manifest==0.39
      - click==7.0
      - coverage==4.5.3
      - cuvner==18.0.1
      - docutils==0.14
      - filelock==3.0.12
      - importlib-metadata==0.17
      - incremental==17.5.0
      - isort==4.3.20
      - jinja2==2.10.1
      - lazy-object-proxy==1.4.1
      - markupsafe==1.1.1
      - marshmallow==3.2.1
      - marshmallow-union==0.1.12
      - mccabe==0.6.1
      - more-itertools==7.0.0
      - mypy==0.701
      - mypy-extensions==0.4.1
      - packaging==19.0
      - pathtools==0.1.2
      - pex==1.6.7
      - pluggy==0.12.0
      - py==1.8.0
      - pygments==2.4.2
      - pylint==2.3.1
      - pyparsing==2.4.0
      - pytest==4.6.2
      - pytest-sphinx==0.2.2
      - pyyaml==5.1.1
      - readme-renderer==24.0
      - six==1.12.0
      - toml==0.10.0
      - towncrier==19.2.0
      - tox==3.12.1
      - typed-ast==1.3.5
      - unidiff==0.5.5
      - versioneer==0.18
      - virtualenv==16.6.0
      - watchdog==0.9.0
      - wcwidth==0.1.7
      - webencodings==0.5.1
      - wrapt==1.11.1
      - zipp==0.5.1
prefix: /opt/conda/envs/python-marshmallow-union

tests/test_union.py::test_round_trip[data5-schema5] tests/test_union.py::test_raises[data0-schema0] tests/test_union.py::test_raises[data1-schema1] tests/test_union.py::test_raises[data2-schema2]
tests/test_union.py::test_round_trip[data0-schema0] tests/test_union.py::test_round_trip[data1-schema1] tests/test_union.py::test_round_trip[data2-schema2] tests/test_union.py::test_round_trip[data3-schema3] tests/test_union.py::test_round_trip[data4-schema4]
src/marshmallow_union/__init__.py
src/marshmallow_union/__init__.py