Причина в том, что список переменных - это не список строк, а список ProgramInfo. Используя Linq, вы можете изменить код следующим образом:
public async System.Threading.Tasks.Task SerializeAsync(List<ProgrammInfo> list)
{
var stringList = list.Select(x => x.ToString());
using (FileStream fs = File.AppendAllLines("save3.json", stringList))
...
Но я не смог запустить код, так как AppendAllLines возвращает void ... и сериализовал объект в json и записал его в файл. можно сделать проще, как прокомментировал Kn oop.