         if serialized.typeName != "Space" || serialized.contentType != .space {
             throw DeserializationError.invalidSerialized(message: "Does not represent a plain serialized Space instance")
         }
-        
-        guard let entitiesJson = serialized.data["entities"].array else {
-            throw DeserializationError.invalidSerialized(message: "Missing 'entities'")
-        }
-        guard let subspacesJson = serialized.data["subspaces"].array else {
-            throw DeserializationError.invalidSerialized(message: "Missing 'subspaces'")
-        }
-        
-        let entities: [Entity] = try entitiesJson.map {
-            try Serialized(json: $0)
-        }.map {
+
+        let serializedSpace = try SerializedSpace(json: serialized.data)
+
+        let entities: [Entity] = try serializedSpace.entities.map {
             try extract(from: $0)
         }
         
-        let subspaces: [Subspace] = try subspacesJson.map {
-            try Serialized(json: $0)
-        }.map {
+        let subspaces: [Subspace] = try serializedSpace.subspaces.map {
             try extract(from: $0)
         }
         

            }
        }
    }
}

/// Describes an object that can be serialized to and back from a JSON object.

            
            serializedSubspaces.append(serialize(ser))
        }

        let serializedSpace = SerializedSpace(entities: serializedEntities, subspaces: serializedSubspaces)
        
        return Serialized(typeName: name, contentType: type, data: serializedSpace.serialized())
    }
    
    /// Serializes a given serializable object, returning an encapsulated
