public object Resolve(object source, Dictionary <String, IResolver> resolvers = null, Boolean recursive = false) { Array result = null; Object modelSource = source as Model.ListInstance; if (modelSource == null) { modelSource = source as Model.Folder; } if (modelSource != null) { Model.FolderCollection sourceFolders = modelSource.GetPublicInstancePropertyValue("Folders") as Model.FolderCollection; if (sourceFolders != null) { var folderTypeName = $"{PnPSerializationScope.Current?.BaseSchemaNamespace}.Folder, {PnPSerializationScope.Current?.BaseSchemaAssemblyName}"; var folderType = Type.GetType(folderTypeName, true); result = Array.CreateInstance(folderType, sourceFolders.Count); resolvers = new Dictionary <string, IResolver> { { $"{folderType}.Folder1", new FoldersFromModelToSchemaTypeResolver() }, { $"{folderType}.Security", new SecurityFromModelToSchemaTypeResolver() } }; // Default Column Values var dictionaryItemTypeName = $"{PnPSerializationScope.Current?.BaseSchemaNamespace}.StringDictionaryItem, {PnPSerializationScope.Current?.BaseSchemaAssemblyName}"; var dictionaryItemType = Type.GetType(dictionaryItemTypeName, true); var dictionaryItemKeySelector = CreateSelectorLambda(dictionaryItemType, "Key"); var dictionaryItemValueSelector = CreateSelectorLambda(dictionaryItemType, "Value"); resolvers.Add($"{folderType}.DefaultColumnValues", new FromDictionaryToArrayValueResolver <string, string>(dictionaryItemType, dictionaryItemKeySelector, dictionaryItemValueSelector)); // Folders' Properties var folderPropertyTypeName = $"{PnPSerializationScope.Current?.BaseSchemaNamespace}.StringDictionaryItem, {PnPSerializationScope.Current?.BaseSchemaAssemblyName}"; var folderPropertyType = Type.GetType(folderPropertyTypeName, true); var folderPropertyKeySelector = CreateSelectorLambda(folderPropertyType, "Key"); var folderPropertyValueSelector = CreateSelectorLambda(folderPropertyType, "Value"); resolvers.Add($"{folderType}.Properties", new FromDictionaryToArrayValueResolver <string, string>( folderPropertyType, folderPropertyKeySelector, folderPropertyValueSelector)); for (Int32 c = 0; c < sourceFolders.Count; c++) { var targetFolderItem = Activator.CreateInstance(folderType); PnPObjectsMapper.MapProperties(sourceFolders[c], targetFolderItem, resolvers, recursive); result.SetValue(targetFolderItem, c); } } } return(result.Length > 0 ? result : null); }
public object Resolve(object source, Dictionary <String, IResolver> resolvers = null, Boolean recursive = false) { Array result = null; Object modelSource = source as Model.ListInstance; if (modelSource == null) { modelSource = source as Model.Folder; } if (modelSource != null) { Model.FolderCollection sourceFolders = modelSource.GetPublicInstancePropertyValue("Folders") as Model.FolderCollection; if (sourceFolders != null) { var folderTypeName = $"{PnPSerializationScope.Current?.BaseSchemaNamespace}.Folder, {PnPSerializationScope.Current?.BaseSchemaAssemblyName}"; var folderType = Type.GetType(folderTypeName, true); result = Array.CreateInstance(folderType, sourceFolders.Count); resolvers = new Dictionary <string, IResolver>(); resolvers.Add($"{folderType}.Folder1", new FoldersFromModelToSchemaTypeResolver()); resolvers.Add($"{folderType}.Security", new SecurityFromModelToSchemaTypeResolver()); for (Int32 c = 0; c < sourceFolders.Count; c++) { var targetFolderItem = Activator.CreateInstance(folderType); PnPObjectsMapper.MapProperties(sourceFolders[c], targetFolderItem, resolvers, recursive); result.SetValue(targetFolderItem, c); } } } return(result); }