def _build_parser_for_fileobject_and_desiredtype(self, obj_on_filesystem: PersistedObject, object_typ: Type[T],<EOL>logger: Logger = None) -> Dict[Type, Parser]:
parsers = OrderedDict()<EOL>errors = OrderedDict()<EOL>try:<EOL><INDENT>p = self.__build_parser_for_fileobject_and_desiredtype(obj_on_filesystem,<EOL>object_typ=object_typ,<EOL>logger=logger)<EOL>parsers[object_typ] = p<EOL><DEDENT>except NoParserFoundForObjectExt as e:<EOL><INDENT>logger.warning("<STR_LIT>".format(type(e).__name__, e))<EOL>errors[e] = e<EOL><DEDENT>except NoParserFoundForObjectType as f:<EOL><INDENT>logger.warning("<STR_LIT>".format(type(f).__name__, f))<EOL>errors[f] = f<EOL><DEDENT>if is_collection(object_typ, strict=True):<EOL><INDENT>if len(errors) > <NUM_LIT:0>:<EOL><INDENT>raise next(iter(errors.values()))<EOL><DEDENT>else:<EOL><INDENT>return parsers<EOL><DEDENT><DEDENT>subclasses = get_all_subclasses(object_typ)<EOL>for subclass in subclasses[<NUM_LIT:0>:GLOBAL_CONFIG.dict_to_object_subclass_limit]:<EOL><INDENT>try:<EOL><INDENT>parsers[subclass] = self.__build_parser_for_fileobject_and_desiredtype(obj_on_filesystem,<EOL>object_typ=subclass,<EOL>logger=logger)<EOL><DEDENT>except NoParserFoundForObjectExt as e:<EOL><INDENT>logger.warning("<STR_LIT>".format(type(e).__name__, e))<EOL>errors[e] = e<EOL><DEDENT>except NoParserFoundForObjectType as f:<EOL><INDENT>logger.warning("<STR_LIT>".format(type(f).__name__, f))<EOL>errors[f] = f<EOL><DEDENT><DEDENT>if len(subclasses) > GLOBAL_CONFIG.dict_to_object_subclass_limit:<EOL><INDENT>warn('<STR_LIT>'<EOL>'<STR_LIT>'<EOL>'<STR_LIT>'.format(object_typ, len(subclasses), GLOBAL_CONFIG.dict_to_object_subclass_limit))<EOL><DEDENT>return parsers<EOL>
Builds a parser for each subtype of object_typ

:param obj_on_filesystem:
:param object_typ:
:param logger:
:return: