private static void _SerializationHandler(IList target, SerializedObjectNode targetNode)
        {
            int count = target.Count;
            for (int i = 0; i < count; i++)
            {
                SerializedObjectNode node = targetNode.CreateChild("entry" + i);

                object value = target[i];

                _InvokeSerializerHandler(value, node);
            }
        }
        private static void _SerializationHandler(Array target, SerializedObjectNode targetNode)
        {
            Assert.AreEqual(1, target.Length);

            int count = target.Length;
            for (int i = 0; i < count; i++)
            {
                SerializedObjectNode node = targetNode.CreateChild("entry" + i);

                object value = target.GetValue(i);

                _InvokeSerializerHandler(value, node);
            }
        }
        private static void _SerializationHandler(IDictionary target, SerializedObjectNode targetNode)
        {
            int i = 0;
            foreach (object key in target.Keys)
            {
                SerializedObjectNode node = targetNode.CreateChild("entry" + i);
                SerializedObjectNode keyNode = node.CreateChild("key");
                SerializedObjectNode valueNode = node.CreateChild("value");

                _InvokeSerializerHandler(key, keyNode);
                _InvokeSerializerHandler(target[key], valueNode);

                i++;
            }
        }
        private static void _SerializationHandler(object target, SerializedObjectNode targetNode)
        {
            Type targetType = target.GetType();
            FieldInfo[] fields = TypeHelper.GetFields(targetType, typeof (SerializeField), true);

            foreach (FieldInfo fieldInfo in fields)
            {
                SerializedObjectNode fieldNode = targetNode.CreateChild(fieldInfo.Name);
                object fieldValue = fieldInfo.GetValue(target);

                _InvokeSerializerHandler(fieldValue, fieldNode);
            }

            targetNode.SetVersionInfo(targetType);
        }