Het probleem hier is dat u het scheidingsteken niet serialiseert. Toevoegen:
w.Write(delimiter)
als eerste regel in uw Write-methode en
delimiter = r.ReadString();
als eerste regel in uw Read-methode.
Wat betreft uw vragen over de voorgestelde tijdelijke oplossing:
Het doet niet. Het werkte alleen met uw testscenario.
De schrijfmethode moet compatibel zijn met de leesmethode. Als je twee strings schrijft en er maar één leest, gaat het niet werken. Het idee hier is dat uw object uit het geheugen kan worden verwijderd en vervolgens kan worden geladen. Dit is wat Schrijven en Lezen moeten doen. In uw geval - dit gebeurde inderdaad en u kon de objectwaarde niet behouden.