Why do we need both `read_field` and `_read_dict`? It looks to me they both read value of field. 
Can you add docstring for `_read_dict` and `_write_dict`?