I think you are getting confused between serializing (dumping) and deserializing (loading).
See, the Dumping process is progressing from object form to json-serializable basic python classes with the help of Schema.dump) or json string (using Schema.dumps). Loading on the other hand is a reverse operation. Generally, your API loads the data from the external world and dumps your objects to the outer world.
If your input information is this data and you want to load it into objects, you need to use load, not dump.
user_data = {"name":"xyz", "age":"20", "is_active": 'true',"details":"{'key1':'val1', 'key2':'val2'}"}
user_loaded_data = user_schema.load(user_data)
user = User(**user_loaded_data)
Except if you do so, you'll get some another issue. DictField expects data as a dict, not a str. You need to enter the below code:
user_data = {"name":"xyz", "age":"20", "is_active": 'true',"details": {'key1':'val1', 'key2':'val2'}}
If you are a total beginner and wish to learn Python, then do check out the below python tutorial video for better understanding: