Я записываю некоторые JSON напрямую в файл, который затем читается позже. Затем JSON десериализуется с использованием newton в объект.
Сначала я писал так, и все работало нормально:
using (var sw = File.CreateText(jsonFile))
{
sw.Write(content);
}
Затем я столкнулся с состоянием гонки, и мне сказали, что нужно идти по этому маршруту
using (var fs = new FileStream(jsonFile, FileMode.Open, FileAccess.Write,
FileShare.ReadWrite))
{
using (var sr = new StreamWriter(fs))
{
sr.Write(content);
}
}
Но при десериализации JSON я получил это сообщение
Newtonsoft.Json.JsonReaderException: дополнительный текст, встречающийся после завершения чтения содержимого JSON: u. Путь ''
Когда я добавил кодировку в StreamWriter
(UTF8), я получил то же сообщение, но другой символ.
Так, как предложение из комментария, я попробовал это для потокового редактора для кодирования для удаления спецификации
var utf8WithoutBom = new System.Text.UTF8Encoding(false);
Затем добавил его в потоковую запись. Была возвращена та же ошибка, но на этот раз символ был пустым.
Используя jsonlint, JSON (контент), который был написан, корректно проверяет оба вышеуказанных метода.
Кто-нибудь знает, почему второй метод (использующий FileStream
) не работает? И если да, то есть ли у вас предложение, что мне делать вместо этого?