Ejemplo n.º 1
0
        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);
            }
        }