It's a long time I work with embedded platforms, however I never used a well-defined and "standard" data serialization format. I often had the need to exchange data between platforms (Wifi, Ethernet, RS485...) and I always find a custom solution.
I perfectly understood the problem with this approach. Keeping the two (or more) side synchronized is very difficult and error-prone. When the sides are designed and maintaned by a single person/company, this approach could be sufficient. However I started to interface with other people, companies, very difficult techologies.
ASN.1 (mainly in uPER mode) and protobuf could be a good choice. However the backend/frontend guys don't know ASN.1, some has heard about protobuf. I could insist to use ASN.1, however I'm not sure it is a good choice. And I don't know if they will be able to decode uPER messages in Typescript (for example). It seems they found something for BER, nothing for PER.
So this post just to discuss and share some experience on this topic.