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); }
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); }
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); } } } }