CSEvilTestor.testfunc.CSLEConvert.FromJson C# (CSharp) Method

FromJson() public static method

public static FromJson ( string ScriptTypeName, MyJson data ) : object
ScriptTypeName string
data MyJson
return object
        public static object FromJson(string ScriptTypeName, MyJson.JsonNode_Object data)
        {
            var type = env.GetTypeByKeywordQuiet(ScriptTypeName);
            CSLE.SType stype = type.function as CSLE.SType;
            CSLE.SInstance s = new CSLE.SInstance();
            s.type = stype;

            foreach (var m in stype.members)
            {
                if (m.Value.bStatic) continue;

                s.member[m.Key] = new CSLE.CLS_Content.Value();
                s.member[m.Key].type = m.Value.type.type;
                s.member[m.Key].value = m.Value.type.DefValue;//先填默认值

                if (data.ContainsKey(m.Key) == false)//json中没有的部分填默认值
                    continue;
                if (data[m.Key].IsNull())//json中没有的部分填默认值
                    continue;

                {

                    if ((Type)m.Value.type.type == typeof(int))
                    {
                        s.member[m.Key].value = data[m.Key].AsInt();
                    }
                    else if ((Type)m.Value.type.type == typeof(float))
                    {
                        s.member[m.Key].value = (float)data[m.Key].AsDouble();
                    }
                    else if ((Type)m.Value.type.type == typeof(double))
                    {
                        s.member[m.Key].value = data[m.Key].AsDouble();
                    }
                    else if ((Type)m.Value.type.type == typeof(string))
                    {
                        s.member[m.Key].value = data[m.Key].AsString();
                    }
                    else if ((Type)m.Value.type.type == typeof(List<object>))
                    {
                        //处理List
                        List<object> list = new List<object>();
                        s.member[m.Key].value = list;
                        int i = m.Value.type.keyword.IndexOf('<');

                        string subtype = m.Value.type.keyword.Substring(i + 1);
                        subtype = subtype.Remove(subtype.Length - 1);
                        foreach (MyJson.JsonNode_Object item in data[m.Key].AsList())
                        {
                            list.Add(FromJson(subtype, item));
                        }
                    }
                    else if ((Type)m.Value.type.type == typeof(List<string>))
                    {
                        List<string> list = new List<string>();
                        s.member[m.Key].value = list;
                        foreach (MyJson.JsonNode_ValueString item in data[m.Key].AsList())
                        {
                            list.Add(item);
                        }
                    }
                    else if ((Type)m.Value.type.type == typeof(List<int>))
                    {
                        List<int> list = new List<int>();
                        s.member[m.Key].value = list;
                        foreach (MyJson.JsonNode_ValueNumber item in data[m.Key].AsList())
                        {
                            list.Add(item);
                        }
                    }
                    else if ((Type)m.Value.type.type == typeof(List<float>))
                    {
                        List<float> list = new List<float>();
                        s.member[m.Key].value = list;
                        foreach (MyJson.JsonNode_ValueNumber item in data[m.Key].AsList())
                        {
                            list.Add(item);
                        }
                    }
                    else if ((Type)m.Value.type.type == typeof(List<double>))
                    {
                        List<double> list = new List<double>();
                        s.member[m.Key].value = list;
                        foreach (MyJson.JsonNode_ValueNumber item in data[m.Key].AsList())
                        {
                            list.Add(item);
                        }
                    }
                    else if ((CSLE.SType)m.Value.type.type != null)//其他嵌套脚本类型
                    {
                        CSLE.SType subtype = (CSLE.SType)m.Value.type.type;
                        s.member[m.Key].value = FromJson(m.Value.type.keyword, data[m.Key] as MyJson.JsonNode_Object);
                    }
                    else
                    {
                        Debug.Log("发现不能处理的类型:" + ScriptTypeName + ":" + m.Key + ":" + m.Value.type.ToString());
                    }
                }

            }


            return s;
        }