def METHOD_NAME(self, obj):  # pylint: disable=method-hidden
    """Add supports for datetime and JSerializable class to default json
    :param obj: object to serialize
    :return: json string of the serialized objects
    """
    # If we have a datetime object, dumps its string representation
    if isinstance(obj, datetime.datetime):
        return {"__dCls": "dt", "obj": obj.strftime(DATETIME_DEFAULT_FORMAT)}
    elif isinstance(obj, datetime.date):
        return {"__dCls": "date", "obj": obj.strftime(DATETIME_DEFAULT_DATE_FORMAT)}
    # if the object inherits from JSJerializable, try to serialize it
    elif isinstance(obj, JSerializable):
        return obj._toJSON()  # pylint: disable=protected-access
    elif isinstance(obj, bytes):
        return {"__dCls": "b64", "obj": b64encode(obj).decode()}
    # otherwise, let the parent do
    return super().METHOD_NAME(obj)