Как правило, изменение файла означает чтение всего файла в память, внесение изменений, а затем запись всего этого в файл. (Существуют определенные форматы файлов, которые не требуют этого, благодаря наличию макета статического размера или других механизмов, предназначенных для работы во время чтения во всем файле, но JSON не является одним из них.)
JSON .net способен reading and writing JSON streams as a series of tokens, поэтому при использовании этого возможно минимизировать объем памяти. Однако вы все равно будете читать весь файл в памяти, а затем записывать его обратно. Из-за одновременного чтения/записи вам нужно будет записать в временный файл, а затем, как только вы закончите, переместите/переименуйте этот файл temp в нужное место.
В зависимости от того, как вы структурировали JSON, вам также может потребоваться отслеживать, где вы находитесь в этой структуре. Это можно сделать, отслеживая маркеры по мере их получения и используя их для поддержания своего рода «пути» в структуре. Этот путь можно использовать для определения того, когда вы находитесь в месте, где требуется обновление.
Общая стратегия заключается в том, чтобы читать в токенах, изменять их, если требуется, а затем записывать их снова.