In terms of serialization, no special handling is required. The Player is saved using the same manner and mechanism as any other SaveableEntity. That’s the beauty of the system, it doesn’t care what’s being saved, only that the SaveableEntity has a unique identifier and the components are ISaveable.
Json purists might argue my solution isn’t a true Json structure, but NewtonSoft’s Json serialization library is rapidly becoming a standard and both Unity and Unreal now include the libraries automagically.
In the BinaryFormatter saving system, we serialize a Dictionary<string, object> where each of those objects are themselves Dictionary<string, object> and then the ISaveables convert the objects to their respective data.
In the Json saving system, we serialize a JObject (which is, in fact, a Dictionary<string, JToken>), each of those JTokens are actually JObjects (again, Dictionary, JToken), and each ISaveable decodes the JToken for it’s data. In my system, I make liberal use of JArrays and JObjects (all of these components are in the NewtonSoft library).