Problemet her er, at du ikke serialiserer afgrænser. Tilføj:
w.Write(delimiter)
som en første linje i din skrivemetode og
delimiter = r.ReadString();
som en første linje i din læsemetode.
Med hensyn til dine spørgsmål til foreslået løsning:
Det gør ikke. Det fungerede kun med dit testscenarie.
Skrivemetoden skal være kompatibel med læsemetoden. Hvis du skriver to strenge og kun læser én, så virker det ikke. Ideen her er, at dit objekt kan fjernes fra hukommelsen og derefter indlæses. Det er, hvad Skriv og Læs skal gøre. I dit tilfælde - dette skete faktisk, og du var ikke i stand til at beholde objektværdien.