コード例 #1
0
        private static void SerializeChild(string name, object value, System.Type type, bool simpleType, SerializationAttribute attr, Tag parent)
        {
            Tag tag = new Tag(name);

            if ((!simpleType || type == typeof(object)) && (value != null && !ReflectionHelper.IsNullable(type)) && value.GetType() != type)
            {
                type        = value.GetType();
                tag["type"] = (object)ReflectionHelper.GetShortAssemblyQualifiedName(type);
            }
            if (simpleType)
            {
                tag.AddValue(value);
            }
            else if (type == typeof(Color))
            {
                Color color = (Color)value;
                SdlSerializer.AddValueList(tag, (object)color.R, (object)color.G, (object)color.B);
                if ((int)color.A != (int)byte.MaxValue)
                {
                    tag.AddValue((object)color.A);
                }
            }
            else if (type == typeof(Vector2))
            {
                Vector2 vector2 = (Vector2)value;
                SdlSerializer.AddValueList(tag, (object)vector2.X, (object)vector2.Y);
            }
            else if (type == typeof(Vector3))
            {
                Vector3 vector3 = (Vector3)value;
                SdlSerializer.AddValueList(tag, (object)vector3.X, (object)vector3.Y, (object)vector3.Z);
            }
            else if (type == typeof(Vector4))
            {
                Vector4 vector4 = (Vector4)value;
                SdlSerializer.AddValueList(tag, (object)vector4.X, (object)vector4.Y, (object)vector4.Z, (object)vector4.W);
            }
            else if (type == typeof(Quaternion))
            {
                Quaternion quaternion = (Quaternion)value;
                SdlSerializer.AddValueList(tag, (object)quaternion.X, (object)quaternion.Y, (object)quaternion.Z, (object)quaternion.W);
            }
            else if (type == typeof(Matrix))
            {
                SdlSerializer.SerializeMatrix(tag, (Matrix)value);
            }
            else if (ReflectionHelper.IsGenericDictionary(type))
            {
                SdlSerializer.SerializeDictionary(tag, value as IDictionary, attr.CollectionItemName);
            }
            else if (ReflectionHelper.IsGenericCollection(type))
            {
                SdlSerializer.SerializeCollection(tag, value as IEnumerable, attr.CollectionItemName);
            }
            else
            {
                SdlSerializer.SerializeInternal(value, type, tag);
            }
            parent.AddChild(tag);
        }
コード例 #2
0
        public static void Serialize <T>(string filePath, T instance)
        {
            System.Type type = typeof(T);
            Tag         tag  = new Tag(SdlSerializer.LowerCamelCase(type.Name));

            tag["type"] = (object)ReflectionHelper.GetShortAssemblyQualifiedName(type);
            SdlSerializer.SerializeInternal((object)instance, type, tag);
            tag.WriteFile(filePath, true);
        }
コード例 #3
0
        private static void SerializeDictionary(Tag tag, IDictionary dictionary, string customItemName)
        {
            bool simpleType1 = false;

            foreach (object index in (IEnumerable)dictionary.Keys)
            {
                SdlSerializer.TryCoerce(index, out simpleType1);
                if (simpleType1)
                {
                    SdlSerializer.TryCoerce(dictionary[index], out simpleType1);
                    if (!simpleType1)
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            if (simpleType1)
            {
                foreach (object index1 in (IEnumerable)dictionary.Keys)
                {
                    bool   simpleType2;
                    string index2 = SdlSerializer.TryCoerce(index1, out simpleType2).ToString();
                    object obj    = SdlSerializer.TryCoerce(dictionary[index1], out simpleType2);
                    tag[index2] = obj;
                }
            }
            else
            {
                System.Type[] genericArguments = dictionary.GetType().GetGenericArguments();
                System.Type   type1            = genericArguments[0];
                System.Type   type2            = genericArguments[1];
                foreach (object index in (IEnumerable)dictionary.Keys)
                {
                    object instance = dictionary[index];
                    bool   simpleType2;
                    object obj  = SdlSerializer.TryCoerce(index, out simpleType2);
                    Tag    tag1 = new Tag(SdlSerializer.LowerCamelCase(customItemName ?? type2.Name));
                    tag.AddChild(tag1);
                    if (simpleType2)
                    {
                        tag1["key"] = obj;
                        SdlSerializer.SerializeInternal(instance, type2, tag1);
                    }
                    else
                    {
                        SdlSerializer.SerializeChild("key", index, type1, false, SdlSerializer.DefaultAttribute, tag1);
                        bool simpleType3;
                        SdlSerializer.SerializeChild("value", SdlSerializer.TryCoerce(instance, out simpleType3), type2, simpleType3, SdlSerializer.DefaultAttribute, tag1);
                    }
                }
            }
        }