@@ -920,9 +920,9 @@ def to_dict(
920920 """
921921 output : Dict [str , Any ] = {}
922922 field_types = self ._type_hints ()
923+ defaults = self ._betterproto .default_gen
923924 for field_name , meta in self ._betterproto .meta_by_field_name .items ():
924- field_type = field_types [field_name ]
925- field_is_repeated = type (field_type ) is type (typing .List )
925+ field_is_repeated = defaults [field_name ] is list
926926 value = getattr (self , field_name )
927927 cased_name = casing (field_name ).rstrip ("_" ) # type: ignore
928928 if meta .proto_type == TYPE_MESSAGE :
@@ -988,7 +988,7 @@ def to_dict(
988988 output [cased_name ] = b64encode (value ).decode ("utf8" )
989989 elif meta .proto_type == TYPE_ENUM :
990990 if field_is_repeated :
991- enum_class : Type [Enum ] = field_type .__args__ [0 ]
991+ enum_class : Type [Enum ] = field_types [ field_name ] .__args__ [0 ]
992992 if isinstance (value , typing .Iterable ) and not isinstance (
993993 value , str
994994 ):
@@ -997,7 +997,7 @@ def to_dict(
997997 # transparently upgrade single value to repeated
998998 output [cased_name ] = [enum_class (value ).name ]
999999 else :
1000- enum_class : Type [Enum ] = field_type # noqa
1000+ enum_class : Type [Enum ] = field_types [ field_name ] # noqa
10011001 output [cased_name ] = enum_class (value ).name
10021002 else :
10031003 output [cased_name ] = value
0 commit comments