private void NormalizeDataset(DatasetJsonObj dataset, List <string> dimensions, IDataStructureObject kf, ISet <ICodelistObject> codelists)
        {
            if (dataset.series.Count < 2)
            {
                return;
            }

            string FirstSerie = dataset.series.Keys.First();

            List <string> TemplateRow             = AllPossibleValues(dimensions, kf, codelists);
            Dictionary <string, string> primaRiga = dataset.series[FirstSerie];

            dataset.series[FirstSerie] = new Dictionary <string, string>();

            TemplateRow.ForEach(t =>
            {
                if (primaRiga.ContainsKey(t))
                {
                    dataset.series[FirstSerie][t] = primaRiga[t];
                }
                else
                {
                    dataset.series[FirstSerie].Add(t, "null");
                }
            });


            foreach (var serie in dataset.series)
            {
                if (serie.Key == FirstSerie)
                {
                    continue;
                }
                foreach (string rigaK in serie.Value.Keys)
                {
                    if (dataset.series[FirstSerie][rigaK] == "null")
                    {
                        dataset.series[FirstSerie][rigaK] = "NaN";
                    }
                }
            }
            List <string> Keys = dataset.series[FirstSerie].Keys.ToList();

            foreach (string rigaK in Keys)
            {
                if (dataset.series[FirstSerie][rigaK] == "null")
                {
                    dataset.series[FirstSerie].Remove(rigaK);
                }
            }
        }
        public DatasetJsonObj ParseAllData(IDataSetStore store, List <DataCriteria> Criterias, LayoutObj layObj, IDataStructureObject kf, ISet <ICodelistObject> codelists)
        {
            if (PageNumber > 0)
            {
                return(ParseAllDataPage(1));
            }

            string DominantFreq = CalculateDominantFrequency(Criterias, kf, codelists);


            CurrentPageIndex = 1;
            int            NObservationForPage = WebClientSettings.Instance.NObservationForPage;
            DatasetJsonObj dataset             = new DatasetJsonObj()
            {
                series = new Dictionary <string, Dictionary <string, string> >()
            };
            List <string> sort = new List <string>();

            sort.AddRange(layObj.axis_y);
            sort.AddRange(layObj.axis_x);
            store.SetSort(sort);
            store.SetCriteria(Criterias);
            IDataReader datareader = store.CreateDataReader(false);

            try
            {
                int ActualRecordRegistred = 0;
                PageNumber = 0;
                JavaScriptSerializer ser = new JavaScriptSerializer();
                ser.MaxJsonLength = int.MaxValue;
                while (datareader.Read())
                {
                    List <string> Colonne = new List <string>();
                    layObj.axis_x.ForEach(axisX => Colonne.Add(GetFromReader(datareader, axisX, DominantFreq, kf.TimeDimension.Id)));

                    List <string> Righe = new List <string>();
                    layObj.axis_y.ForEach(axisY => Righe.Add(GetFromReader(datareader, axisY, DominantFreq, kf.TimeDimension.Id)));

                    string OBSVal = (string)datareader[kf.PrimaryMeasure.Id];

                    string serieString = string.Join("+", Righe);

                    if (!dataset.series.ContainsKey(serieString))
                    {
                        if (ActualRecordRegistred >= NObservationForPage)
                        {
                            //NormalizeDataset(dataset, layObj.axis_x, kf, codelists);
                            FileInfo fi = new FileInfo(Path.Combine(PagingFileDirectory.FullName, string.Format(FilePageFormat, PagingFileDirectory.Name, PageNumber + 1)));
                            File.WriteAllText(fi.FullName, ser.Serialize(dataset));

                            ActualRecordRegistred = 0;
                            PageNumber++;
                            dataset = null;
                            dataset = new DatasetJsonObj()
                            {
                                series = new Dictionary <string, Dictionary <string, string> >()
                            };
                        }

                        //dataset.series[serieString] = AllPossibleValues(layObj.axis_x, kf, codelists);
                        dataset.series[serieString] = new Dictionary <string, string>();
                    }
                    dataset.series[serieString][string.Join("+", Colonne)] = OBSVal;
                    ActualRecordRegistred++;
                }

                FileInfo fiLastPage = new FileInfo(Path.Combine(PagingFileDirectory.FullName, string.Format(FilePageFormat, PagingFileDirectory.Name, PageNumber + 1)));
                File.WriteAllText(fiLastPage.FullName, ser.Serialize(dataset));
                PageNumber++;
                if (PageNumber == 1)
                {
                    return(dataset);
                }

                return(ParseAllDataPage(1));
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                store.Commit();
            }
        }