For others following along - this is https://github.com/golang/go/issues/5901 to register custom marshallers on an existing `json.Encoder` instance.
I feel like it's generally possible to work around this by creating a wrapper struct with an overridden MarshalJSON method? But maybe that's infeasible for deeply nested structs.