Vấn đề ở đây là bạn không tuần tự hóa dấu phân cách. Thêm:
w.Write(delimiter)
như một dòng đầu tiên trong phương thức Viết của bạn và
delimiter = r.ReadString();
ở dòng đầu tiên trong phương pháp Đọc của bạn.
Về câu hỏi của bạn đối với công việc được đề xuất:
Nó không. Nó chỉ hoạt động với kịch bản thử nghiệm của bạn.
Phương thức Write cần phải tương thích với phương thức Read. Nếu bạn viết hai chuỗi và chỉ đọc một chuỗi thì nó sẽ không hoạt động. Ý tưởng ở đây là đối tượng của bạn có thể bị xóa khỏi bộ nhớ và sau đó được tải. Đây là những gì Viết và Đọc phải làm. Trong trường hợp của bạn - điều này thực sự đã xảy ra và bạn không thể giữ giá trị đối tượng.