Пример #1
0
        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();
            }
        }