@@ -173,6 +173,11 @@ def _transform_recursive(
173173# Iterable[T]
174174or (is_iterable_type (stripped_type )and is_iterable (data )and not isinstance (data ,str ))
175175 ):
176+ # dicts are technically iterable, but it is an iterable on the keys of the dict and is not usually
177+ # intended as an iterable, so we don't transform it.
178+ if isinstance (data ,dict ):
179+ return cast (object ,data )
180+
176181inner_type = extract_type_arg (stripped_type ,0 )
177182return [_transform_recursive (d ,annotation = annotation ,inner_type = inner_type )for d in data ]
178183
@@ -186,7 +191,7 @@ def _transform_recursive(
186191return data
187192
188193if isinstance (data ,pydantic .BaseModel ):
189- return model_dump (data ,exclude_unset = True )
194+ return model_dump (data ,exclude_unset = True , mode = "json" )
190195
191196annotated_type = _get_annotated_type (annotation )
192197if annotated_type is None :
@@ -324,7 +329,7 @@ async def _async_transform_recursive(
324329return data
325330
326331if isinstance (data ,pydantic .BaseModel ):
327- return model_dump (data ,exclude_unset = True )
332+ return model_dump (data ,exclude_unset = True , mode = "json" )
328333
329334annotated_type = _get_annotated_type (annotation )
330335if annotated_type is None :