public override void WriteProperties(JsonObjectContract contract, JsonWriter writer, object value, Type objectType, JsonSerializerWriter internalWriter) { base.WriteProperties(contract, writer, value, objectType, internalWriter); GameObject gameObject = (GameObject)value; GameObjectSerializationHandler serializationHandler = gameObject.GetComponent <GameObjectSerializationHandler>(); writer.WriteProperty("name", gameObject.name); writer.WriteProperty("tag", gameObject.tag); writer.WriteProperty("active", gameObject.activeSelf); writer.WriteProperty("isStatic", gameObject.isStatic); writer.WriteProperty("layer", gameObject.layer); writer.WriteProperty("hideFlags", gameObject.hideFlags); bool serializeComponents = true; if (serializationHandler != null) { serializeComponents = serializationHandler.SerializeComponents; } if (serializeComponents) { writer.WritePropertyName("components"); writer.WriteStartArray(); Component[] components = gameObject.GetComponents <Component>(); for (int i = 0; i < components.Length; i++) { Component component = components[i]; bool shouldSerialize = true; if (serializationHandler != null) { shouldSerialize = serializationHandler.ShouldSerializeComponent(component); } if (shouldSerialize) { writer.WriteStartObject(); internalWriter.WriteTypeProperty(writer, component.GetType()); writer.WritePropertyName(JsonTypeReflector.ValuePropertyName); internalWriter.Serialize(writer, component); writer.WriteEndObject(); } } writer.WriteEndArray(); } bool serializeChildren = true; if (serializationHandler != null) { serializeChildren = serializationHandler.SerializeChildren; } if (serializeChildren) { writer.WritePropertyName("children"); writer.WriteStartArray(); for (int i = 0; i < gameObject.transform.childCount; i++) { Transform child = gameObject.transform.GetChild(i); bool shouldSerialize = true; if (serializationHandler != null) { shouldSerialize = serializationHandler.ShouldSerializeChild(child); } if (shouldSerialize) { internalWriter.Serialize(writer, child.gameObject); } } writer.WriteEndArray(); } }