Запись JSON из архива в БД

Всем привет. Помогите сохранить записи в БД. Вообще сложно у меня с пониманием работы Stream и всего что с ними связано.

Задача такова: Есть архив. В архиве лежат JSON файлы. Мне нужно на бэкэ этот архив открыть, и записать всего содержимое в БД.

Открыть архив и получить имена файлов я могу. А вот получить строку (текст json), чтобы это строку внести в БД не получается.

Помогите плес.

Полный пример того что есть. Тут загрузка архива, проверка, дешифровка вложенных JSON, если они зашифрованы, сериализация\десериализация:

public async Task<List<FileImportResult>> Handle(FileUploadCommand command, CancellationToken cancellationToken)
        {
            List<FileImportResult> result = new List<FileImportResult>();

            using (var zipFile = new ZipArchive(command.File.OpenReadStream())) {
                if (zipFile.Entries.Count == 0) {
                    throw new Exception("В архиве нет файлов");
                }

                foreach (ZipArchiveEntry f in zipFile.Entries) {
                    FileImportResult uploadRes = new FileImportResult
                    {
                        FileName = f.FullName
                    };

                    //using (StreamWriter sw = new StreamWriter())
                    //upload
                    try {
                        var ms = new MemoryStream();
                        f.Open().CopyTo(ms);
                        await Import(ms);
                    } catch (Exception e) {
                        //uploadRes.ErrorMessage = "Ошибка при чтении файла. Возможно, файл поврежден.";
                        uploadRes.ErrorMessage = e.Message;
                        result.Add(uploadRes);
                    }
                }
            }

            return result;
        }

        public async Task Import(Stream s)
        {
            var settings = Configuration.GetTypedSection<PublicApiSettings>("PublicApi");
            try {
                string OfflineAppEncryptionKey = settings.OfflineAppEncryptionKey;
                s = StreamDecryptor.TryDecrypt(s, OfflineAppEncryptionKey);
            } catch (Exception e) {
                string errorMessage = "Ошибка при чтении файла. Возможно, файл в неверной кодировке или поврежден. Нужно использовать кодировку UTF-8.";
                throw new Exception(errorMessage, e);
            }
            HandlingReportApi.Models.Request model = null;
            try {
                model = JsonSerializer.Create(SerializerSettings).Deserialize<HandlingReportApi.Models.Request>(new JsonTextReader(new StreamReader(s)));
                HttpResponseMessage message = await _handlingReportApi.Import(model);
            } catch (Exception e) {
                MonthWithoutRequests month = TryDeserializeMonthWithoutRequests(s);
                if (month != null) {
                    var request = new HandlingReportMonthWithoutRequests
                    {
                        ...
                    };
                    await _handlingReportApi.Import(request);
                    return;
                } else {
                    throw;
                }
            }
        }
        private MonthWithoutRequests TryDeserializeMonthWithoutRequests(Stream s)
        {
            try {
                return JsonSerializer.Create(SerializerSettings).Deserialize<MonthWithoutRequests>(new JsonTextReader(new StreamReader(s)));
            } catch (Exception ex) {
                return null;
            }
        }

        public async Task<Result<HandlingReport>> AddArchiveToBase(string archiveName, Guid userId, string[] jsonFiles, CancellationToken cancellationToken)
        {
            var archive = new HandlingReport
            {
                UserId = userId,
                FileName = archiveName,
                HandlingReportFiles = new List<HandlingReportFile>()
            };

            foreach (var json in jsonFiles)
            {
                archive.HandlingReportFiles.Add(new HandlingReportFile
                {
                    FileName = json,
                    Content = "File content"
                });
            }

            return await _repository.CreateAsync(archive, cancellationToken);
        }

Ответы (0 шт):