Beispiel #1
0
        public static void SaveData(string path, Dictionary <string, object> data)
        {
            List <BaseValue> temp = new List <BaseValue>();

            foreach (string obj in data.Keys)
            {
                BaseValue bv = new BaseValue(obj, data[obj]);
                temp.Add(bv);
            }
            string json = JsonUtils.ListToJson(temp);

            FileUtils.CreateTextFile(path, json);
        }
Beispiel #2
0
        public bool EqualTo(BaseValue v)
        {
            if (v == null)
            {
                return(false);
            }

            if (typeName.Equals(v.typeName) && value.Equals(v.value) && valueType.Equals(v.valueType))
            {
                return(true);
            }

            return(false);
        }
Beispiel #3
0
        public void SetValue(object value)
        {
            if (value == null)
            {
                return;
            }
            fieldValues.Clear();

            Type         type  = value.GetType();
            BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;

            FieldInfo[] fields = type.GetFields(flags);
            ScriptName = type.FullName;
            for (int i = 0; i < fields.Length; i++)
            {
                FieldInfo f = fields[i];
                object    v = f.GetValue(value);
                if (v == null)
                {
                    continue;
                }
                BaseValue scriptValue = new BaseValue(f.Name, v);
                fieldValues.Add(scriptValue);
            }

            PropertyInfo[] propertyInfos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
            for (int i = 0; i < propertyInfos.Length; i++)
            {
                PropertyInfo property = propertyInfos[i];
                if (property.CanRead && property.CanWrite)
                {
                    try
                    {
                        BaseValue scriptValue = new BaseValue(property.Name, property.GetValue(value, null));
                        propertyValues.Add(scriptValue);
                    }
                    catch
                    {
                        continue;
                    }
                }
            }
        }
Beispiel #4
0
        /// <summary>
        /// 获取储存的实例
        /// </summary>
        /// <param name="getInstanceCallBackR">自定义实例生成,用于GameObject组件赋值</param>
        /// <returns></returns>
        public object GetValue(CallBackR <object, Type> getInstanceCallBackR = null)
        {
            if (string.IsNullOrEmpty(ScriptName))
            {
                return(null);
            }
            Type   type     = ReflectionUtils.GetTypeByTypeFullName(ScriptName);
            object classObj = null;

            if (getInstanceCallBackR != null)
            {
                classObj = getInstanceCallBackR(type);
            }
            else
            {
                classObj = ReflectionUtils.CreateDefultInstance(type);
            }

            BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;

            for (int i = 0; i < fieldValues.Count; i++)
            {
                BaseValue fInfo = fieldValues[i];
                FieldInfo f     = type.GetField(fInfo.name, flags);
                if (f != null && f.Name == fInfo.name)
                {
                    try
                    {
                        f.SetValue(classObj, fInfo.GetValue());
                    }
                    catch
                    {
                        continue;
                    }
                }
            }



            PropertyInfo[] propertyInfos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
            for (int i = 0; i < propertyInfos.Length; i++)
            {
                PropertyInfo property = propertyInfos[i];
                if (property.CanRead && property.CanWrite)
                {
                    try
                    {
                        for (int j = 0; j < propertyValues.Count; j++)
                        {
                            BaseValue pinfo = propertyValues[i];
                            if (property != null && property.Name == pinfo.name)
                            {
                                property.SetValue(classObj, pinfo.GetValue(), null);
                            }
                        }
                    }
                    catch
                    {
                        continue;
                    }
                }
            }

            return(classObj);
        }