Example #1
0
    static JSSerializer.UnitType GetUnitType(Type type, object value)
    {
        if (sDict == null)
        {
            sDict = new Dictionary <Type, JSSerializer.UnitType>();

            sDict.Add(typeof(Boolean), JSSerializer.UnitType.ST_Boolean);

            sDict.Add(typeof(Byte), JSSerializer.UnitType.ST_Byte);
            sDict.Add(typeof(SByte), JSSerializer.UnitType.ST_SByte);
            sDict.Add(typeof(Char), JSSerializer.UnitType.ST_Char);
            sDict.Add(typeof(Int16), JSSerializer.UnitType.ST_Int16);
            sDict.Add(typeof(UInt16), JSSerializer.UnitType.ST_UInt16);
            sDict.Add(typeof(Int32), JSSerializer.UnitType.ST_Int32);
            sDict.Add(typeof(UInt32), JSSerializer.UnitType.ST_UInt32);
            sDict.Add(typeof(Int64), JSSerializer.UnitType.ST_Int64);
            sDict.Add(typeof(UInt64), JSSerializer.UnitType.ST_UInt64);

            sDict.Add(typeof(Single), JSSerializer.UnitType.ST_Single);
            sDict.Add(typeof(Double), JSSerializer.UnitType.ST_Double);


            sDict.Add(typeof(String), JSSerializer.UnitType.ST_String);
        }

        if (type.IsEnum)
        {
            return(JSSerializer.UnitType.ST_Enum);
        }

        Type valueType = (value != null ? value.GetType() : type);

        if (
            ((typeof(UnityEngine.MonoBehaviour).IsAssignableFrom(type)) && WillTypeBeTranslatedToJavaScript(type)) ||
            // 2015/10/23
            // 其实这个函数应该总是取 valueType 来判断
            // 怕出 bug,这里先特殊支持,当 type == MonoBehaviour 时,才检查 valueType
            ((typeof(UnityEngine.MonoBehaviour) == type) && WillTypeBeTranslatedToJavaScript(valueType))
            )
        {
            return(JSSerializer.UnitType.ST_JavaScriptMonoBehaviour);
        }
        if ((typeof(UnityEngine.Object).IsAssignableFrom(type)))
        {
            return(JSSerializer.UnitType.ST_UnityEngineObject);
        }

        JSSerializer.UnitType ret = JSSerializer.UnitType.ST_Unknown;
        if (!sDict.TryGetValue(type, out ret))
        {
            // Debug.LogError("GetIndex: Unknown type: " + type.Name);
            return(JSSerializer.UnitType.ST_Unknown);
        }
        return(ret);
    }
Example #2
0
        public JSSerializer.UnitType    unitType; // Unit type, it's useless when analyzeType == xxBegin xxObj xxEnd

        public AnalyzeStructInfo(JSSerializer.AnalyzeType at,
                                 string name, Type type, object v = null,
                                 JSSerializer.UnitType ut         = JSSerializer.UnitType.ST_Unknown)
        {
            analyzeType = at;
            Name        = name;
            this.type   = type;
            value       = v;
            unitType    = ut;

            eSerialize = SerializeType.String;
        }
Example #3
0
 public static int AddAnalyze(Type type, string name, object value, int index = -1)
 {
     if (index == -1)
     {
         index = lstAnalyze.Count;
     }
     JSSerializer.UnitType unitType = GetUnitType(type, value);
     if (unitType != JSSerializer.UnitType.ST_Unknown)
     {
         lstAnalyze.Insert(index, new AnalyzeStructInfo(JSSerializer.AnalyzeType.Unit, name, type, value, unitType));
         return(1);
     }
     else
     {
         if (type.IsArray)
         {
             lstAnalyze.Insert(index++, new AnalyzeStructInfo(JSSerializer.AnalyzeType.ArrayBegin, name, type));
             lstAnalyze.Insert(index++, new AnalyzeStructInfo(JSSerializer.AnalyzeType.ArrayObj, name, type, value));
             lstAnalyze.Insert(index++, new AnalyzeStructInfo(JSSerializer.AnalyzeType.ArrayEnd, name, type));
             return(3);
         }
         else if (type.IsClass || type.IsValueType)
         {
             if (value == null)
             {
                 return(0);
             }
             lstAnalyze.Insert(index++, new AnalyzeStructInfo(JSSerializer.AnalyzeType.StructBegin, name, type));
             lstAnalyze.Insert(index++, new AnalyzeStructInfo(JSSerializer.AnalyzeType.StructObj, name, type, value));
             lstAnalyze.Insert(index++, new AnalyzeStructInfo(JSSerializer.AnalyzeType.StructEnd, name, type));
             return(3);
         }
         else if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List <>))
         {
             lstAnalyze.Insert(index++, new AnalyzeStructInfo(JSSerializer.AnalyzeType.ListBegin, name, type));
             lstAnalyze.Insert(index++, new AnalyzeStructInfo(JSSerializer.AnalyzeType.ListObj, name, type, value));
             lstAnalyze.Insert(index++, new AnalyzeStructInfo(JSSerializer.AnalyzeType.ListEnd, name, type));
             return(3);
         }
     }
     return(0);
 }
        public AnalyzeStructInfo(JSSerializer.AnalyzeType at,
            string name, Type type, object v = null,
            JSSerializer.UnitType ut = JSSerializer.UnitType.ST_Unknown)
        {
            analyzeType = at;
            Name = name;
            this.type = type;
            value = v;
            unitType = ut;

            eSerialize = SerializeType.String;
        }