Запись 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);
}