private void handleEditInstanceBtnClick()
        {
            if (inspectView.SelectedGameObjects.Count > 0)
            {
                var selectedObject = inspectView.SelectedGameObjects[0];
                var dialog         = new InputDialog("Edit Object", WorldObjectSerializer.Serialize(selectedObject).ToString(Formatting.Indented));

                if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    inspectView.Deselect();
                    selectedObject.DisconnectFromWorld();
                    selectedObject.Destroy();

                    var newObject = WorldObjectSerializer.Deserialize(JObject.Parse(dialog.ResultText));

                    newObject.ConnectToWorld();
                    inspectView.SelectGameObject(newObject);
                }
            }
            else if (inspectView.SelectedWorldLink != null)
            {
                var SelectedWorldLink = inspectView.SelectedWorldLink;
                var dialog            = new InputDialog("Edit Object", JToken.FromObject(SelectedWorldLink, SerializationUtils.Serializer).ToString(Formatting.Indented));

                if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    inspectView.Deselect();

                    var newWorldLink = SerializationUtils.Serializer.Deserialize <WorldLink>(new JTokenReader(JToken.Parse(dialog.ResultText)));
                    SimulationGame.World.UpdateWorldLink(SelectedWorldLink, newWorldLink);
                }
            }
        }
        protected static void Deserialize(ref JObject jObject, WorldPart worldPart)
        {
            SerializationUtils.SetFromObject(jObject, worldPart, worldPartType, serializeableProperties);

            // Deserialize Ambient Objects
            JArray ambientObjects = (JArray)jObject.GetValue("AmbientObjects");

            foreach (var ambientObject in ambientObjects)
            {
                worldPart.AddAmbientObject((AmbientObject)WorldObjectSerializer.Deserialize((JObject)ambientObject));
            }

            // Deserialize Hitable Objects
            JArray containedObjects = (JArray)jObject.GetValue("ContainedObjects");

            foreach (var containedObject in containedObjects)
            {
                worldPart.AddContainedObject((HitableObject)WorldObjectSerializer.Deserialize((JObject)containedObject));
            }
        }