private void ReadToPair(JToken token, ConfigurationSet set)
        {
            ReadOrWriteConfiguration   configuration = token.ToObject <ReadOrWriteConfiguration>();
            ReaderConfigurationMapping readers       = this.resolver.Get <ReaderConfigurationMapping>();
            WriterConfigurationMapping writers       = this.resolver.Get <WriterConfigurationMapping>();

            if (configuration.Read != null)
            {
                ConfigurationBase configurationBase = token.ToObject(readers.Resolve(configuration.Read)) as ConfigurationBase;
                this.Prepare(configurationBase);
                set.Readers.Add(configurationBase);
            }
            if (configuration.Write != null)
            {
                ConfigurationBase configurationBase = token.ToObject(writers.Resolve(configuration.Write)) as ConfigurationBase;
                this.Prepare(configurationBase);
                set.Writers.Add(configurationBase);
            }
        }
        public List <ConfigurationSet> Read(ConfigurationVersion version)
        {
            List <ConfigurationSet> list = new List <ConfigurationSet>();

            if (version.Generate is JObject obj)
            {
                ConfigurationSet set = new ConfigurationSet();
                this.ReadToPair(obj, set);
                list.Add(set);
            }
            else if (version.Generate is JArray array)
            {
                if (array.First is JObject)
                {
                    ConfigurationSet set = new ConfigurationSet();
                    foreach (JObject entry in array.OfType <JObject>())
                    {
                        this.ReadToPair(entry, set);
                    }
                    list.Add(set);
                }
                else if (array.First is JArray)
                {
                    foreach (JArray innerArray in array.OfType <JArray>())
                    {
                        ConfigurationSet set = new ConfigurationSet();
                        foreach (JObject entry in innerArray.OfType <JObject>())
                        {
                            this.ReadToPair(entry, set);
                        }
                        list.Add(set);
                    }
                }
            }
            list.ForEach(pair => pair.Readers.ForEach(reader => reader.Formatting = reader.Formatting ?? version.Formatting));
            list.ForEach(pair => pair.Writers.ForEach(writer => writer.Formatting = writer.Formatting ?? version.Formatting));
            return(list);
        }