jasonToObject



    /// <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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值