/// <summary> /// Add user type. /// </summary> /// <param name="cfg">Configuration.</param> /// <param name="typeCfg">Type configuration.</param> /// <param name="typeResolver">The type resolver.</param> /// <param name="dfltSerializer">The default serializer.</param> private void AddUserType(PortableConfiguration cfg, PortableTypeConfiguration typeCfg, TypeResolver typeResolver, IPortableSerializer dfltSerializer) { // Get converter/mapper/serializer. IPortableNameMapper nameMapper = typeCfg.NameMapper ?? cfg.DefaultNameMapper; IPortableIdMapper idMapper = typeCfg.IdMapper ?? cfg.DefaultIdMapper; bool metaEnabled = typeCfg.MetadataEnabled ?? cfg.DefaultMetadataEnabled; bool keepDeserialized = typeCfg.KeepDeserialized ?? cfg.DefaultKeepDeserialized; // Try resolving type. Type type = typeResolver.ResolveType(typeCfg.TypeName, typeCfg.AssemblyName); if (type != null) { // Type is found. var typeName = GetTypeName(type); int typeId = PortableUtils.TypeId(typeName, nameMapper, idMapper); var serializer = typeCfg.Serializer ?? cfg.DefaultSerializer ?? GetPortableMarshalAwareSerializer(type) ?? dfltSerializer; var refSerializer = serializer as PortableReflectiveSerializer; if (refSerializer != null) { refSerializer.Register(type, typeId, nameMapper, idMapper); } AddType(type, typeId, typeName, true, metaEnabled, keepDeserialized, nameMapper, idMapper, serializer, typeCfg.AffinityKeyFieldName, null, null); } else { // Type is not found. string typeName = PortableUtils.SimpleTypeName(typeCfg.TypeName); int typeId = PortableUtils.TypeId(typeName, nameMapper, idMapper); AddType(null, typeId, typeName, true, metaEnabled, keepDeserialized, nameMapper, idMapper, null, typeCfg.AffinityKeyFieldName, null, null); } }