/// <summary>
        /// Do the interferring
        /// </summary>
        /// <param name="sender">a repo</param>
        /// <param name="e">ignored</param>
        void Repo_ConfigurationChanged(object sender, EventArgs e)
        {
            var repo = sender as ILoggerRepository;

            repo.RendererMap.Put(typeof(object), JsonObjectRenderer.Default);
            repo.RendererMap.Put(typeof(Exception), new DefaultRenderer());

            foreach (var appender in repo.GetAppenders())
            {
                PatternLayout layout = null;

                if (appender is AppenderSkeleton)
                {
                    var anylayout = ((AppenderSkeleton)appender).Layout;
                    if (anylayout == null)
                    {
                        ((AppenderSkeleton)appender).Layout = layout = new SerializedLayout();
                    }
                    else
                    {
                        layout = ((AppenderSkeleton)appender).Layout as PatternLayout;
                    }
                }
                else
                {
                    var prop = appender.GetType().GetProperty("Layout");
                    if (prop != null &&
                        typeof(ILayout).IsAssignableFrom(prop.PropertyType) &&
                        prop.GetIndexParameters().Length == 0)
                    {
                        var anylayout = prop.GetValue(appender, null);
                        if (anylayout == null)
                        {
                            ((AppenderSkeleton)appender).Layout = layout = new SerializedLayout();
                        }
                        else if (prop.CanWrite)
                        {
                            prop.SetValue(appender, layout = new SerializedLayout(), null);
                        }
                    }
                    else
                    {
                        layout = null;
                    }
                }

                if (layout == null)
                {
                    continue;
                }

                layout.AddConverter(new ConverterInfo()
                {
                    Name = "json", Type = typeof(JsonPatternConverter)
                });
                layout.ActivateOptions();
            }
        }
        protected OlapAxisLayoutSerializer()
        {
            EmptyDataString      = string.Empty;
            CurrencyFormatString = OlapControl.__CurrencyFormatString;
            AxesLayout           = new SerializedLayout();
            SizeMode             = SizeMode.Increase;

            _analysisType       = AnalysisType.Grid;
            _AnalysisTypeWasset = false;

            SuppressSaveOLAPSlices = false;
        }
        internal virtual void LoadFrom(OlapControl grid)
        {
            DebugLogging.WriteLine("OlapAxisLayoutSerializer.LoadFrom");

            EmptyDataString      = grid.FEmptyDataString;
            CurrencyFormatString = grid.FCurrencyFormatString;

            grid.RefreshChartsType();
            ChartsType = grid.ChartsType;
            TrendSerialize(grid);

            AxesLayout = new SerializedLayout();
            AxesLayout.Init(grid);

            var lh = new List <SerializedHierarchy>();

            foreach (var d in grid.Dimensions)
            {
                foreach (var h in d.Hierarchies)
                {
                    lh.Add(new SerializedHierarchy(h));
                }
            }
            Hierarchies = lh.ToArray();

            if (grid.FCellSet.fComments.Count > 0)
            {
                var ca = new List <SerializedICubeAddress>(grid.FCellSet.fComments.Count);
                var cs = new List <string>(grid.FCellSet.fComments.Count);

                foreach (var k in grid.FCellSet.fComments)
                {
                    ca.Add(new SerializedICubeAddress(k.Key));
                    cs.Add(k.Value);
                }

                CommentAddresses = ca.ToArray();
                CommentStrings   = cs.ToArray();
            }
            SaveCubeData(grid);
        }