/// <summary>
/// 获得表单全路径
/// </summary>
static string TextPath(string filename)
{
string txtPath = string.Empty;
#if UNITY_IPHONE
txtPath = Application.dataPath + "/Raw/Text/" + filename + ".json";
#else
txtPath = Application.dataPath + "/../Documents/Text/" + filename + ".json";
#endif
//Debug.Log("加载配置文件:" + txtPath);
return txtPath;
}
#region 读取配置文件
static string ReadFile(string fileName)
{
#if UNITY_ANDROID
TextAsset txtAsset = Resources.Load("Text/" + fileName, typeof(TextAsset)) as TextAsset;
string content = txtAsset.text;
#else
string content = string.Empty;
using (StreamReader sr = new StreamReader(TextPath(fileName)))
{
content = sr.ReadToEnd();
sr.Close();
sr.Dispose();
}
#endif
return content;
}
static void LoadDevelopExpInfo()
{
ConfigurationTables.Instance.DevelopExpDatas.Clear();
List<object> pveList = Json.Deserialize(ReadFile(devexp)) as List<object>;
for (int i = 0; i < pveList.Count; i++)
{
Dictionary<string, object> dic = pveList[i] as Dictionary<string, object>;
using (DevelopExp info = DeSerialize<DevelopExp>(typeof(DevelopExp), dic) as DevelopExp)
{
ConfigurationTables.Instance.DevelopExpDatas.Add(info);
}
}
}
static object DeSerialize<T>(Type type, Dictionary<string, object> dic) where T : new()
{
FieldInfo[] fInfos = type.GetFields(BindingFlags.Public | BindingFlags.Instance |
BindingFlags.GetProperty);
object obj = System.Activator.CreateInstance(type);
List<object> result;
for (int i = 0; i < fInfos.Length; i++)
{
if (dic.ContainsKey(fInfos[i].Name))
{
switch (fInfos[i].FieldType.ToString())
{
case "System.String":
fInfos[i].SetValue(obj, dic[fInfos[i].Name].ToString());
break;
case "System.Int32":
fInfos[i].SetValue(obj, int.Parse(dic[fInfos[i].Name].ToString()));
break;
case "System.Single":
fInfos[i].SetValue(obj, float.Parse(dic[fInfos[i].Name].ToString()));
break;
case "System.Collections.Generic.List`1[System.Int32]":
result = dic[fInfos[i].Name] as List<object>;
List<int> list = new List<int>();
for (int j = 0; j < result.Count; j++ )
{
list.Add(int.Parse(result[j].ToString()));
}
fInfos[i].SetValue(obj, list);
break;
case "System.Int32[]":
result = dic[fInfos[i].Name] as List<object>;
int[] val = new int[result.Count];
for (int j = 0; j < result.Count; j++)
{
val[j] = int.Parse(result[j].ToString());
}
fInfos[i].SetValue(obj, val);
break;
case "System.String[]":
result = dic[fInfos[i].Name] as List<object>;
string[] str = new string[result.Count];
for (int j = 0; j < result.Count; j++)
{
str[j] = result[j].ToString();
}
fInfos[i].SetValue(obj, str);
break;
}
}
}
return obj;
}
} /// <summary>
/// 获得表单全路径
/// </summary>
static string TextPath(string filename)
{
string txtPath = string.Empty;
#if UNITY_IPHONE
txtPath = Application.dataPath + "/Raw/Text/" + filename + ".json";
#else
txtPath = Application.dataPath + "/../Documents/Text/" + filename + ".json";
#endif
//Debug.Log("加载配置文件:" + txtPath);
return txtPath;
}
#region 读取配置文件
static string ReadFile(string fileName)
{
#if UNITY_ANDROID
TextAsset txtAsset = Resources.Load("Text/" + fileName, typeof(TextAsset)) as TextAsset;
string content = txtAsset.text;
#else
string content = string.Empty;
using (StreamReader sr = new StreamReader(TextPath(fileName)))
{
content = sr.ReadToEnd();
sr.Close();
sr.Dispose();
}
#endif
return content;
}
static void LoadDevelopExpInfo()
{
ConfigurationTables.Instance.DevelopExpDatas.Clear();
List<object> pveList = Json.Deserialize(ReadFile(devexp)) as List<object>;
for (int i = 0; i < pveList.Count; i++)
{
Dictionary<string, object> dic = pveList[i] as Dictionary<string, object>;
using (DevelopExp info = DeSerialize<DevelopExp>(typeof(DevelopExp), dic) as DevelopExp)
{
ConfigurationTables.Instance.DevelopExpDatas.Add(info);
}
}
}
static object DeSerialize<T>(Type type, Dictionary<string, object> dic) where T : new()
{
FieldInfo[] fInfos = type.GetFields(BindingFlags.Public | BindingFlags.Instance |
BindingFlags.GetProperty);
object obj = System.Activator.CreateInstance(type);
List<object> result;
for (int i = 0; i < fInfos.Length; i++)
{
if (dic.ContainsKey(fInfos[i].Name))
{
switch (fInfos[i].FieldType.ToString())
{
case "System.String":
fInfos[i].SetValue(obj, dic[fInfos[i].Name].ToString());
break;
case "System.Int32":
fInfos[i].SetValue(obj, int.Parse(dic[fInfos[i].Name].ToString()));
break;
case "System.Single":
fInfos[i].SetValue(obj, float.Parse(dic[fInfos[i].Name].ToString()));
break;
case "System.Collections.Generic.List`1[System.Int32]":
result = dic[fInfos[i].Name] as List<object>;
List<int> list = new List<int>();
for (int j = 0; j < result.Count; j++ )
{
list.Add(int.Parse(result[j].ToString()));
}
fInfos[i].SetValue(obj, list);
break;
case "System.Int32[]":
result = dic[fInfos[i].Name] as List<object>;
int[] val = new int[result.Count];
for (int j = 0; j < result.Count; j++)
{
val[j] = int.Parse(result[j].ToString());
}
fInfos[i].SetValue(obj, val);
break;
case "System.String[]":
result = dic[fInfos[i].Name] as List<object>;
string[] str = new string[result.Count];
for (int j = 0; j < result.Count; j++)
{
str[j] = result[j].ToString();
}
fInfos[i].SetValue(obj, str);
break;
}
}
}
return obj;
}
}