@@ -106,18 +106,18 @@ def as_json(self) -> JSON:
106106 def from_json (cls , parsed : JSON ) -> "Obj" :
107107 assert isinstance (parsed , dict )
108108 kwargs = {}
109- for name , t in cls . __annotations__ . items ( ):
110- field : Conversion = cls ._conversion [name ]
109+ for f in fields ( cls ):
110+ conv : Conversion = cls ._conversion [f . name ]
111111 if (
112- hasattr (t , "__origin__" )
113- and inspect .isclass (t .__origin__ )
114- and issubclass (t .__origin__ , MaybeMissing )
112+ hasattr (f . type , "__origin__" )
113+ and inspect .isclass (f . type .__origin__ )
114+ and issubclass (f . type .__origin__ , MaybeMissing )
115115 ):
116- kwargs [name ] = (
117- Jst (field .from_json (parsed [name ])) if name in parsed else Miss ()
116+ kwargs [f . name ] = (
117+ Jst (conv .from_json (parsed [f . name ])) if f . name in parsed else Miss ()
118118 )
119119 else :
120- kwargs [name ] = field .from_json (parsed [name ])
120+ kwargs [f . name ] = conv .from_json (parsed [f . name ])
121121 return cls (** kwargs ) # type: ignore
122122
123123
@@ -171,21 +171,21 @@ def as_json(self) -> JSON:
171171 def from_json (cls , parsed : JSON ) -> "Obj" :
172172 assert isinstance (parsed , dict )
173173 kwargs = {}
174- for name , t in cls . __annotations__ . items ( ):
175- field : Conversion = cls ._conversion [name ]
176- maybe_unescaped_name = cls ._maybe_renamed (name )
174+ for field in fields ( cls ):
175+ conv : Conversion = cls ._conversion [field . name ]
176+ maybe_unescaped_name = cls ._maybe_renamed (field . name )
177177 if (
178- hasattr (t , "__origin__" )
179- and inspect .isclass (t .__origin__ )
180- and issubclass (t .__origin__ , MaybeMissing )
178+ hasattr (field . type , "__origin__" )
179+ and inspect .isclass (field . type .__origin__ )
180+ and issubclass (field . type .__origin__ , MaybeMissing )
181181 ):
182- kwargs [name ] = (
183- Jst (field .from_json (parsed [maybe_unescaped_name ]))
182+ kwargs [field . name ] = (
183+ Jst (conv .from_json (parsed [maybe_unescaped_name ]))
184184 if maybe_unescaped_name in parsed
185185 else Miss ()
186186 )
187187 else :
188- kwargs [name ] = field .from_json (parsed [maybe_unescaped_name ])
188+ kwargs [field . name ] = conv .from_json (parsed [maybe_unescaped_name ])
189189 return cls (** kwargs ) # type: ignore
190190
191191 @classmethod
0 commit comments