@@ -97,11 +97,6 @@ def _encode_overrides(kvs, overrides, encode_json=False):
97
97
override_kvs = {}
98
98
for k , v in kvs .items ():
99
99
if k in overrides :
100
- exclude = overrides [k ].exclude
101
- # If the exclude predicate returns true, the key should be
102
- # excluded from encoding, so skip the rest of the loop
103
- if exclude and exclude (v ):
104
- continue
105
100
letter_case = overrides [k ].letter_case
106
101
original_key = k
107
102
k = letter_case (k ) if letter_case is not None else k
@@ -318,14 +313,22 @@ def _asdict(obj, encode_json=False):
318
313
source) to support arbitrary Collection and Mapping types.
319
314
"""
320
315
if _is_dataclass_instance (obj ):
316
+ overrides = _user_overrides_or_exts (obj )
321
317
result = []
322
318
for field in fields (obj ):
323
- value = _asdict (getattr (obj , field .name ), encode_json = encode_json )
319
+ value = getattr (obj , field .name )
320
+ exclude = overrides [field .name ].exclude
321
+ # If the exclude predicate returns true, the key should be
322
+ # excluded from encoding, so skip the rest of the loop
323
+ if exclude and exclude (value ):
324
+ continue
325
+
326
+ value = _asdict (value , encode_json = encode_json )
324
327
result .append ((field .name , value ))
325
328
326
329
result = _handle_undefined_parameters_safe (cls = obj , kvs = dict (result ),
327
330
usage = "to" )
328
- return _encode_overrides (dict (result ), _user_overrides_or_exts ( obj ) ,
331
+ return _encode_overrides (dict (result ), overrides ,
329
332
encode_json = encode_json )
330
333
elif isinstance (obj , Mapping ):
331
334
return dict ((_asdict (k , encode_json = encode_json ),
0 commit comments