I am working in a relatively large codebase where options are represented in JSON as arrays, so None is represented in JSON as [] and Some(thing) as [thing].  (Yes, the codebase also contains Haskell, in case you are wondering.)  How can I override the default serde_json behaviour, which is to omit optional fields, to match this?
E.g. a struct:
SomeData {
  foo: Some(1),
  bar: None
}
should be serialized to JSON as:
{
  "foo": [1],
  "bar": []
}
Of course, one could theoretically implement custom serialization for each and every optional field in every struct that interacts with the codebase but that would be a huge undertaking, even if it were possible.
There don't seem to be any options in the serde_json serialisation of some and none so I imagine that the solution will be creating a new serializer that inherits almost everything from serde_json apart from the Option serialization and deserialization.  Are there any examples of projects that do this?  It would also be possible to make a fork but maintaining a fork is never much fun.