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);
        }
Ejemplo n.º 2
0
        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);
        }