docs: def json(
          self,
          *,
          include: 'SetStr' = None,
          exclude: 'SetStr' = None,
          by_alias: bool = False,
          skip_defaults: bool = False,
          encoder: Optional[Callable[[Any], Any]] = None,
          **dumps_kwargs: Any,
      ) -> str:
          """
          Generate a JSON representation of the model, `include` and `exclude` arguments as per `dict()`.
  
          `encoder` is an optional function to supply as `default` to json.dumps(), other arguments as per `json.dumps()`.
          """
          encoder = cast(Callable[[Any], Any], encoder or self._json_encoder)
          return json.dumps(
              self.dict(include=include, exclude=exclude, by_alias=by_alias, skip_defaults=skip_defaults),
              default=encoder,
              **dumps_kwargs,
          )