Дополнительные байты с использованием FileStream (или так кажется) - PullRequest
2 голосов
/ 30 мая 2019

Я записываю некоторые 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) не работает? И если да, то есть ли у вас предложение, что мне делать вместо этого?

...