Why did Roblox decide to make it so tables which keys are userdatas, tables, functions, and threads sent via RemoteEvents, RemoteFunction, BindableEvent, or BindableFunction end up being turned into a string (the keys turn into a string)? I am tired of having to do workarounds in this engine. For sure in any engine there are issues that not everyone likes, but this is something really important and they are just letting it go by for years.
Code:
game.ReplicatedStorage.Function.OnInvoke = function(Table)
print(Table)
end
game.ReplicatedStorage.Function:Invoke({[workspace] = true})
Output: (As you can see it turns into a string)

I do not expect any sort of right solution, but I want something that convince me to know why Roblox left such behavior.