public static void Save(IDatabaseObject _database) { Type type = _database.GetType(); CheckDirectory(AppDomain.CurrentDomain.BaseDirectory + "/Database/" + type.Name); using (BufferWriter writer = new BufferWriter()) { PropertyInfo[] propertyes = type.GetProperties(); for (int i = 0; i < propertyes.Length; ++i) { switch (propertyes[i].PropertyType.Name) { case "String": writer.String((String)propertyes[i].GetGetMethod(true).Invoke(_database, new object[0])); break; case "Char": writer.Char((Char)propertyes[i].GetGetMethod(true).Invoke(_database, new object[0])); break; case "Double": writer.Double((Double)propertyes[i].GetGetMethod(true).Invoke(_database, new object[0])); break; case "Boolean": writer.Boolean((Boolean)propertyes[i].GetGetMethod(true).Invoke(_database, new object[0])); break; case "Byte": writer.Byte((Byte)propertyes[i].GetGetMethod(true).Invoke(_database, new object[0])); break; case "Single": writer.Float((Single)propertyes[i].GetGetMethod(true).Invoke(_database, new object[0])); break; case "Byte[]": Byte[] buffer = (Byte[])propertyes[i].GetGetMethod(true).Invoke(_database, new object[0]); writer.Int32(buffer.Length); writer.Bytes(buffer); break; case "Int16": writer.Int16((Int16)propertyes[i].GetGetMethod(true).Invoke(_database, new object[0])); break; case "Int32": writer.Int32((Int32)propertyes[i].GetGetMethod(true).Invoke(_database, new object[0])); break; case "Int64": writer.Int64((Int64)propertyes[i].GetGetMethod(true).Invoke(_database, new object[0])); break; case "UInt16": writer.UInt16((UInt16)propertyes[i].GetGetMethod(true).Invoke(_database, new object[0])); break; case "UInt32": writer.UInt32((UInt32)propertyes[i].GetGetMethod(true).Invoke(_database, new object[0])); break; case "UInt64": writer.UInt64((UInt64)propertyes[i].GetGetMethod(true).Invoke(_database, new object[0])); break; } } File.WriteAllBytes(AppDomain.CurrentDomain.BaseDirectory + "/Database/" + type.Name + "/" + _database.ID + ".sdb", writer.Buffer); } }