Why does JsonUtility not support engine types?

So using JsonUtility.ToJson(transform) will result in an error:

ArgumentException: JsonUtility.ToJson does not support engine types.

My question is why? Why can I serialize all self-implemented Mono Behaviours but no engine types? I cannot see any logical reason why this is explicitly forbidden. Yes it is possible using EditorJsonUtility, but I want to be able to do this in the game.

The reason why I want this, is for example to save the initial Transform of an object so I can reset its position/rotation/transform to its original state. Yes I can copy the variables, but I want a more general approach so any component can be stored without the need to define all variables you wish to save for every single component.

It’s because the engine binary actually does not contain the code needed to transfer engine types to/from JSON. We looked at adding it initially, but it would have meant that the JSON system could no longer be stripped from the engine for projects that do not use it, while also making it larger.

In practice this would mean giving everyone a ~500kb increase in binary size, whether they were using JSON or not; that’s not acceptable on platforms like WebGL, and it’s not nice on mobile platforms.