通过反射获取数据库的数据 将其转化为相应类型的数据

反射可以动态获取数据的类型,Type 类可以获取其中的 字段、方法、属性等。

尤其是将字段与属性做区分可以让我们可以获取,自己想获得的。废话不多说上代码。

先将数据导入的类,写下:

 1 using System;
 2 using UnityEngine;
 3
 4 namespace ARPGSimpleDemo.Skill
 5 {
 6     /// <summary>
 7     /// 技能数据
 8     /// </summary>
 9     [Serializable]
10     public class SkillData
11     {
12         /// <summary>技能拥有者</summary>
13         [HideInInspector]
14         public GameObject Owner;
15         /// <summary>技能编号</summary>
16         public int skillID{set;get;}
17         /// <summary>技能图标</summary>
18         public string skillIcon { set;get;}
19         /// <summary>描述</summary>
20         public string description{set;get;}
21         /// <summary>技能名称</summary>
22         public string name{set;get;}
23         /// <summary>持续时间</summary>
24         public float durationTime{set;get;}
25         /// <summary>在持续时间内,两次伤害之间的间隔时间</summary>
26         public float damageInterval{set;get;}
27         /// <summary>伤害比</summary>
28         public float damage {set;get;}
29         /// <summary>冷却时间</summary>
30         public int coolTime{set;get;}
31         /// <summary>冷却剩余</summary>
32         public int coolRemain;
33         /// <summary>魔法消耗</summary>
34         public int costSP{set;get;}
35         /// <summary>攻击距离</summary>
36         public float attackDisntance{set;get;}
37         /// <summary>攻击目标</summary>
38         [HideInInspector]
39         public GameObject[] attackTargets;
40         /// <summary>攻击目标的TAG</summary>
41         public string[] attckTargetTags{set;get;}
42         /// <summary>技能等级</summary>
43         public int level{set;get;}
44         /// <summary>技能预制对象</summary>
45         public GameObject skillPrefab;
46         /// <summary>预制文件名</summary>
47         public string prefabName{set;get;}
48         /// <summary>攻击范围 线形,矩形,扇形,圆形</summary>
49         public DamageMode damageMode{set;get;}
50         /// <summary>攻击类型,单攻,群攻</summary>
51         public SkillAttackType  attackType{set;get;}
52         /// <summary>是否激活</summary>
53         public bool Activated;
54         /// <summary>技能对应的动画名称 </summary>
55         public string animtionName{set;get;}
56         /// <summary> 攻击范围角度</summary>
57         public int attackAngle{set;get;}
58         /// <summary>目标受击特效</summary>
59         public string hitFxName{set;get;}
60         public GameObject hitFxPrefab;
61         /// <summary>下一个连击技能编号</summary>
62         public int nextBatterId{set;get;}
63
64       }
65 }

下面是获取数据  并放入

 1     /// <summary>
 2     /// 将数据库数据放入技能管理类中
 3     /// </summary>
 4     /// <param name="jobId">职业ID</param>
 5     void InitSkill(int jobId)
 6     {
 7         //先将数据库打开
 8         OperatingDB.Instance.CreateDataBase();
 9         //遍历表中所有行
10         SqliteDataReader skill = OperatingDB.Instance.db.ReadFullTable("T_Skill" + jobId);
11         while (skill.Read())
12         {
13             SkillData sd = new SkillData();
14             //反射获取
15             Type t = typeof(SkillData);
16             int i = 0;
17             //遍历SkillData所有属性 t.GetProperties
18             foreach (var item in t.GetProperties())
19             {
20                 i++;
21                 //获取属性 判断 是否为 string
22                 if (item.PropertyType.Equals(typeof(string)))
23                     item.SetValue(sd, skill[i].ToString(), null); //赋值
24                 //获取属性 判断 是否为 float
25                 else if (item.PropertyType.Equals(typeof(float)))
26                     item.SetValue(sd, float.Parse(skill[i].ToString()), null);
27                 //获取属性 判断 是否为 string[]
28                 else if (item.PropertyType.Equals(typeof(string[])))
29                 {
30                     string[] str = skill[i].ToString().Split(‘,‘);
31                     item.SetValue(sd, str, null);
32                 }
33                 //获取属性 其余 其中枚举可以与int做转换
34                 else
35                     item.SetValue(sd, int.Parse(skill[i].ToString()), null);
36             }
37             //获取物体本身的技能管理类 将得到的类传入
38             GetComponent<CharacterSkillManager>().skills.Add(sd);
39         }
40         //关闭数据库
41         OperatingDB.Instance.db.CloseSqlConnection();
42     }
时间: 2024-10-06 03:23:23

通过反射获取数据库的数据 将其转化为相应类型的数据的相关文章

C#反射获取数据库字段

static string sqlselect = "insert into {0}({1}) values ({2})"; (这个方法可以适用于任何数据库的插入语句) public static int managerRegister<T>(T field) { string fieldName = ""; string fieldList = ""; string fieldValue = ""; int k

Spring对象实例化,获取配置文件中的值(property为IDictionary类型的数据)

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Text; namespace WeiXin.Core { public static class JobBase { private static IDictionary<string, string> ParNameDictionary; private static IDictionary<

Jmeter之JSON提取器获取数组类型的数据

前言 在之前,我们已经学会了Jmeter的JSON提取器提取某个数据,还没掌握的小伙伴可以翻看我之前写的随笔Jmeter之JSON提取器,今天我们来学习一下怎么利用JSON提取器获取数组类型的数据,多用于列表信息数据的获取. 本章知识考察点 jsonpath方式获取的值 单个值怎么获取? data.files[索引].filed 多个指定的值怎么获取? data.files 0与-1的设置有什么区别? 0表示随机值,-1表示所有的值 一:先添加登录http请求,然后再添加获取文件列表http请求

zend framework获取数据库中枚举类enum的数据并将其转换成数组

在model中建立这样的模型,在其中写入获取枚举类的方法 class Student extends Zend_Db_Table{ protected $_name ='student'; protected $_primary ='id'; function getPartyEnum($enumname){ //适配器并获取数据 $db = $this->getAdapter(); $db->query("SET NAMES GBK"); $sql = $db->q

C#后台获取数据库数据--ADO.NET

关于获取数据库中的数据到后台,可分为4个步骤:1.获取连接数据库的字符串:2.创建SqlConnection对象用于打开数据库:3.创建SqlCommand对象用于执行操作,设置它的一系列属性即可:4.关闭数据库连接.完成了这个四个步骤就可获取到数据库中的数据. //第一步 string connStr = "Data Source=.;Initial CataLog=MyData;User ID=sa;Password=123456"; //第二步 SqlConnection con

使用 UEditor 编辑器获取数据库中的数据

在 ThinkPHP 3.2.2 中,使用 UEditor 编辑器获取数据库中保存的数据,可以使用 UEditor 自身提供的方法. 首先在视图模板中实例化编辑器,这是出现编辑器界面的必须的行为: <script type="text/javascript"> var editor = UE.getEditor('container'); </script> 然后使用 setContent 方法来使数据显示在编辑框内: editor.setContent(dat

[转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值

本文来自:http://www.cnblogs.com/mrchenzh/archive/2010/05/31/1747937.html /***************************************** * 说明:利用反射将数据库查询的内容自动绑定 *       到实体类 * * 时间:1:49 2009-9-19 * * 程序员:王文壮 * ***************************************/ /****************数据库脚本***

获取数据库增量数据的几种方式

获取数据库增量数据的几种方式 a.触发器:在要抽取的表上建立需要的触发器,一般要建立插入.修改.删除三个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个临时表,抽取线程从临时表中抽取数据,临时表中抽取过的数据被标记或删除.触发器方式的优点是数据抽取的性能较高,缺点是要求业务表建立触发器,对业务系统有一定的影响. b.时间戳:它是一种基于快照比较的变化数据捕获方式,在源表上增加一个时间戳字段,系统中更新修改表数据的时候,同时修改时间戳字段的值.当进行数据抽取时,通过比较系统时

jmeter JDBC Request (查询数据库获取数据库数据) 的使用

JDBC Request 这个Sampler可以向数据库发送一个jdbc请求(sql语句),并获取返回的数据库数据进行操作.它经常需要和JDBC Connection Configuration配置原件(配置数据库连接的相关属性,如连接名.密码等)一起使用. 一.准备工作 1.本文使用的是mysql数据库进行测试,数据库的用户名为root(你自己的用户名),用户名密码为*********(你自己的密码) 2.数据库中有表:test,表的数据结构如下: 表中数据如下: select * from