Hi!
Die serielle Schnittstelle hat überhaupt kein Konzept, was Umlaute sind - alles was darüber läuft, sind Bytes.
Die Aufgabe, diese Bytes als Buchstaben zu interpretieren, wird durch das sog. Encoding beeinflusst (dies kannst Du u.a. in Konstruktor des StreamReaders angeben, IIRC). Nimmst Du da das falsche Encoding, bekommst Du ggf. keine Umlaute (weil sich die Interpretation der Bytes im Bereich >127, in dem die Umlaute liegen können, unterscheidet).
Die notwendigen Klassen findest Du im Namespace System.Text.
Gruß,
Martin
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]