public static SirenType FindType(Type type) { if (type.IsGenericType) { if (type.Name.StartsWith("List")) { return new SirenBuildinList(type); } if (type.Name.StartsWith("Dictionary")) { return new SirenBuildinDictionary(type); } } else { if (type.IsValueType) { if (type == typeof(bool)) { return Bool; } if (type == typeof(char)) { return Int8; } if (type == typeof(short)) { return Int16; } if (type == typeof(int)) { return Int32; } if (type == typeof(Int64)) { return Int64; } if (type == typeof(byte)) { return UInt8; } if (type == typeof(ushort)) { return UInt16; } if (type == typeof(uint)) { return UInt32; } if (type == typeof(UInt64)) { return UInt64; } if (type == typeof(float)) { return Float; } if (type == typeof(double)) { return Double; } } else { if (type == typeof(string)) { return String; } if (type == typeof(byte[])) { return Blob; } } } SirenCustomClass sirenClass; if (AllSirenClasses.TryGetValue(type, out sirenClass)) return sirenClass; if (GenerictSirenClasses.TryGetValue(type, out sirenClass)) { return sirenClass; } SirenCustomEnum sirenEnum; if (AllSirenEnums.TryGetValue(type, out sirenEnum)) return sirenEnum; if (type.IsGenericType) { Type testType = null; foreach (var temp in AllSirenClasses) { var oldType = temp.Key; if (oldType.IsGenericTypeDefinition) { testType = oldType.MakeGenericType(type.GetGenericArguments()); if (testType == type) { var attr2 = type.GetCustomAttributes(typeof(SirenClassAttribute), false); if (attr2.Length <= 0) { return null; } sirenClass = new SirenCustomClass(type, attr2[0] as SirenClassAttribute); sirenClass.Initialize(); break; } testType = null; } } if (testType != null) { GenerictSirenClasses.Add(testType, sirenClass); } } return sirenClass; }
public static SirenCustomClass FindClass(Type type) { if (type.IsPrimitive || type == typeof(string) || type == typeof(byte[])) { return null; } SirenCustomClass sirenClass; if (AllSirenClasses.TryGetValue(type, out sirenClass)) return sirenClass; if (GenerictSirenClasses.TryGetValue(type, out sirenClass)) { return sirenClass; } if (type.IsGenericType) { Type testType = null; foreach (var temp in AllSirenClasses) { var oldType = temp.Key; if (oldType.IsGenericTypeDefinition) { testType = oldType.MakeGenericType(type.GetGenericArguments()); if (testType == type) { var attr2 = type.GetCustomAttributes(typeof(SirenClassAttribute), false); if (attr2.Length <= 0) { return null; } sirenClass = new SirenCustomClass(type, attr2[0] as SirenClassAttribute); sirenClass.Initialize(); break; } testType = null; } } if (testType != null) { GenerictSirenClasses.Add(testType, sirenClass); } } return sirenClass; }