public async Task <FileResult> Handle(ExportLocaleStringList request, CancellationToken cancellationToken)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            request.PageSize = Paging.MaxPageSize;             // disable paging

            var searchResult = await _repository.Search(request, cancellationToken);

            var data = searchResult.Rows.OrderBy(x => x.Locale).ThenBy(x => x.Module).ThenBy(x => x.Key);

            var lists = new List <LocaleStringList>();

            foreach (var localeGroup in data.GroupBy(x => x.Locale))
            {
                var locale = new LocaleStringList
                {
                    Locale  = localeGroup.Key,
                    Modules = new List <LocaleModuleStringList>()
                };

                foreach (var moduleGroup in localeGroup.GroupBy(x => x.Module))
                {
                    locale.Modules.Add(new LocaleModuleStringList
                    {
                        Module = moduleGroup.Key,
                        Items  = moduleGroup.ToList()
                    });
                }

                lists.Add(locale);
            }

            return(new FileResult
            {
                ContentType = "application/json",
                FileName = $"locale-strings-{request.Locale}-{request.Module}-{DateTime.Now.ToString("u").Replace(':', '-').Replace(' ', '-')}.json",
                Stream = await _serializer.Serialize(lists, cancellationToken)
            });
        }
Exemple #2
0
        public async Task <IList <LocaleStringList> > Deserialize(Stream json, CancellationToken cancellationToken)
        {
            var options = new JsonSerializerOptions
            {
                AllowTrailingCommas = true
            };

            var value = await JsonSerializer
                        .DeserializeAsync <Dictionary <string, Dictionary <string, Dictionary <string, string> > > >(json, options, cancellationToken);

            var result = new List <LocaleStringList>();

            foreach (var(locale, modules) in value)
            {
                var item = new LocaleStringList
                {
                    Locale  = locale,
                    Modules = new List <LocaleModuleStringList>()
                };

                foreach (var(module, items) in modules)
                {
                    item.Modules.Add(new LocaleModuleStringList
                    {
                        Module = module,
                        Items  = items.Select(x => new LocaleString {
                            Key = x.Key, Value = x.Value
                        }).ToList()
                    });
                }

                result.Add(item);
            }

            return(result);
        }