Как выпустить файл, написанный с помощью JsonSerializer.Serialize(Utf8JsonWriter)?C#

Место общения программистов C#
Ответить
Anonymous
 Как выпустить файл, написанный с помощью JsonSerializer.Serialize(Utf8JsonWriter)?

Сообщение Anonymous »

Я тестирую метод чтения файла JSON. Итак, при настройке я сначала создаю указанный файл JSON, например:

Код: Выделить всё

string pathOfRelevantStuff = "path";
string fileOfRelevantStuff = Path.Combine(pathOfRelevantStuff, $"fileName_1.json");
Utf8JsonWriter relevantDataWriter = new(File.Create(fileOfRelevantStuff));
JsonSerializer.Serialize(relevantDataWriter, dataToBeReadLater);
relevantDataWriter.Flush();
relevantDataWriter.Dispose();
Метод, который я тестирую, использует следующий код:

Код: Выделить всё

string pathToRead = "path";
FileStream relevantDataReader = null;
foreach (string fileToRead in Directory.EnumerateFiles(pathToRead, "fileName_*"))
{
try
{
relevantDataReader = File.OpenRead(fileToRead);
// [...]
}
}
Последняя строка выдает исключение: «Процесс не может получить доступ к файлу 'path\fileName_1json', поскольку он используется другим процессом».
Во время отладки я прервал выполнение после соответствующей DataWriter.Dispose();, перешел в проводник Windows и попытался просмотреть содержимое файла: Блокнот говорит, что невозможно открыть файл, поскольку он используется другим процессом.
/>Следующий обходной путь работает нормально:

Код: Выделить всё

string pathOfRelevantStuff = "path";
string fileOfRelevantStuff = Path.Combine(pathOfRelevantStuff, $"fileName_1.json");
StreamWriter relevantDataWriter = File.CreateText(fileOfRelevantStuff);
string relevantDataString = JsonSerializer.Serialize(dataToBeReadLater);
relevantDataWriter.WriteLine(relevantDataString);
relevantDataWriter.Close();
relevantDataWriter.Dispose();
По причинам устаревшего я использую System.Text.Json версии 7.0.3.
Что я делаю не так с первым подходом?

Подробнее здесь: https://stackoverflow.com/questions/799 ... jsonwriter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»