Dataclasses in Union
types¶
Suppose that a dataclass field is type-annotated like Union[Class1, Class2]
. Unless the input
data is specifically either a Class1
or Class2
instance, the data won’t be
de-serialized as expected. However, the good news is that there is a simple enough workaround
in this scenario.
As of the v0.14.0 release, the dataclass-wizard
supports declaring dataclasses
within Union
types. Previously, it did not support dataclasses within Union
types
at all, which was kind of a glaring omission, and something on my “to-do” list of things
to (eventually) add support for.
There is now full support for defining dataclasses as Union
type arguments. The
reason it did not generally work before, is because the data being de-serialized is
often a JSON object, which only knows simple types such as arrays and dictionaries,
for example. A dict
type would not otherwise match any of the Union[Data1, Data2]
types, even if the object had all the correct dataclass fields as keys. This is simply
because it doesn’t attempt to de-serialize the dict
object, in a round robin fashion,
into each of the dataclass models in the Union
arguments – though that might
change in a future release.