示例#1
0
        void WriteChildrenJsonData(BNode childNode, JsonData parentData)
        {
            JsonData nodeData = new JsonData();

            parentData.Add(nodeData);
            nodeData.SetJsonType(JsonType.Object);
            nodeData["name"] = childNode.NodeName;

            nodeData["type"] = childNode.GetType().ToString();

            JsonData args = new JsonData();

            args.SetJsonType(JsonType.Array);
            nodeData["args"] = args;
            #region args
            Type                type     = childNode.GetType();
            PropertyInfo[]      ps       = type.GetProperties();
            PropertyInfo[]      basePs   = type.BaseType.GetProperties();
            List <PropertyInfo> listInfo = new List <PropertyInfo>();
            foreach (PropertyInfo info in ps)
            {
                bool flag = false;
                foreach (PropertyInfo baseinfo in basePs)
                {
                    if (baseinfo.Name.Equals(info.Name))
                    {
                        flag = true;
                    }
                }
                if (flag)
                {
                    continue;
                }
                listInfo.Add(info);
            }
            for (int i = 0; i < listInfo.Count; i++)
            {
                PropertyInfo info = listInfo[i];
                JsonData     arg  = new JsonData();
                arg["argname"]  = info.Name;
                arg["argtype"]  = info.PropertyType.ToString();
                arg["argvalue"] = info.GetValue(childNode, null).ToString();
                args.Add(arg);
            }
            #endregion

            JsonData childrenData = new JsonData();
            childrenData.SetJsonType(JsonType.Array);
            nodeData["children"] = childrenData;
            for (int i = 0; i < childNode.ListChildren.Count; i++)
            {
                BNode child = childNode.ListChildren[i];
                WriteChildrenJsonData(child, childrenData);
            }
        }
示例#2
0
        void AddChildNode(JsonData jsonData, BNode fatherNode)
        {
            //Debug.LogError("jsonData  " + jsonData["name"]);
            Type  t         = Type.GetType((string)jsonData["type"]);
            BNode nodeChild = Activator.CreateInstance(t) as BNode;

            #region args
            JsonData       args   = jsonData["args"];
            PropertyInfo[] pInfos = nodeChild.GetType().GetProperties();
            for (int i = 0; i < args.Count; i++)
            {
                JsonData arg = args[i];

                PropertyInfo pi = nodeChild.GetType().GetProperty(arg["argname"].ToString());
                if (Type.GetType(arg["argtype"].ToString()).Equals(typeof(System.String)))
                {
                    pi.SetValue(nodeChild, arg["argvalue"].ToString(), null);
                }
                else if (Type.GetType(arg["argtype"].ToString()).Equals(typeof(System.Single)))
                {
                    pi.SetValue(nodeChild, float.Parse(arg["argvalue"].ToString()), null);
                }
                else if (Type.GetType(arg["argtype"].ToString()).Equals(typeof(System.Int32)))
                {
                    pi.SetValue(nodeChild, int.Parse(arg["argvalue"].ToString()), null);
                }
                else if (Type.GetType(arg["argtype"].ToString()).BaseType.Equals(typeof(System.Enum)))
                {
                    //pi.SetValue(nodeChild, int.Parse(arg["argvalue"].ToString()), null);
                    //arg["argvalue"].ToString()
                    //Debug.LogError("--------------------------------------ffff");

                    FieldInfo   fiSelect = null;
                    FieldInfo[] fields   = pi.PropertyType.GetFields(BindingFlags.Static | BindingFlags.Public);
                    for (int j = 0; j < fields.Length; j++)
                    {
                        FieldInfo fi = fields[j];
                        if (fi.Name.Equals(arg["argvalue"].ToString()))
                        {
                            fiSelect = fi;
                        }
                    }
                    pi.SetValue(nodeChild, fiSelect.GetValue(null), null);
                }
                else if (Type.GetType(arg["argtype"].ToString()).Equals(typeof(System.Boolean)))
                {
                    if (arg["argvalue"].ToString().Equals("True"))
                    {
                        pi.SetValue(nodeChild, true, null);
                    }
                    else
                    {
                        pi.SetValue(nodeChild, false, null);
                    }
                }
            }

            #endregion

            fatherNode.AddChild(nodeChild);

            for (int i = 0; i < jsonData["children"].Count; i++)
            {
                JsonData nodeJson = jsonData["children"][i];
                AddChildNode(nodeJson, nodeChild);
            }
        }