internal UserDefinedTypeReader RegisterType(System.Type type) { var instance = new UserDefinedTypeImporter(type); var typedReader = new UserDefinedTypeReader { Reader = instance.Read, RealType = type }; var typeId = new UserDefinedType { Type = type, TypeName = instance.TypeName }; UserTypeReaders[typeId] = typedReader; return(typedReader); }
private ReadDelegate CreateUserDefinedReader(ref System.Type realType) { var typename = Reader.ReadStringProperty("__Type"); if (typename.Length > 0) { UserDefinedTypeReader reader; var typeid = new UserDefinedType { Type = realType, TypeName = typename }; if (!UserTypeReaders.TryGetValue(typeid, out reader)) { var type = System.Type.GetType(typename, false, false); if (type == null) { // try to locate type in the assembly of T var assembly = realType.Assembly; type = assembly.GetType(typename, false, false); if (type == null) { // try to locate the type in all loaded assemblies var assemblies = System.AppDomain.CurrentDomain.GetAssemblies(); for (var i = 0; i < assemblies.Length && type == null; ++i) { type = assemblies[i].GetType(typename, false, false); } } } if (type != null) { var userTypeReader = RegisterType(type); realType = userTypeReader.RealType; return(userTypeReader.Reader); } throw new BindingException(ScriptCallErrorType.SCE_ArgumentType, string.Format("Could not determine managed type from __Type {0}", typename)); } realType = reader.RealType; return(reader.Reader); } throw new BindingException(ScriptCallErrorType.SCE_ArgumentType, string.Format("Could not determine managed type from JavaScript value")); }
internal UserDefinedTypeReader RegisterType(System.Type type) { var instance = new UserDefinedTypeImporter(type); var typedReader = new UserDefinedTypeReader { Reader = instance.Read, RealType = type }; var typeId = new UserDefinedType { Type = type, TypeName = instance.TypeName }; UserTypeReaders[typeId] = typedReader; return typedReader; }
private ReadDelegate CreateUserDefinedReader(ref System.Type realType) { var typename = Reader.ReadStringProperty("__Type"); if (typename.Length > 0) { UserDefinedTypeReader reader; var typeid = new UserDefinedType { Type = realType, TypeName = typename }; if (!UserTypeReaders.TryGetValue(typeid, out reader)) { var type = System.Type.GetType(typename, false, false); if (type == null) { // try to locate type in the assembly of T var assembly = realType.Assembly; type = assembly.GetType(typename, false, false); if (type == null) { // try to locate the type in all loaded assemblies var assemblies = System.AppDomain.CurrentDomain.GetAssemblies(); for (var i = 0; i < assemblies.Length && type == null; ++i) { type = assemblies[i].GetType(typename, false, false); } } } if (type != null) { var userTypeReader = RegisterType(type); realType = userTypeReader.RealType; return userTypeReader.Reader; } throw new BindingException(ScriptCallErrorType.SCE_ArgumentType, string.Format("Could not determine managed type from __Type {0}", typename)); } realType = reader.RealType; return reader.Reader; } throw new BindingException(ScriptCallErrorType.SCE_ArgumentType, string.Format("Could not determine managed type from JavaScript value")); }