Deserialize Stream zu ListT oder einem anderen Typ

8

Versuch, einen Stream in List<T> (oder einen anderen Typ) zu deserialisieren und den Fehler zu beheben:

  

Die Typargumente für die Methode Foo.Deserialize<T>(System.IO.Stream) können nicht aus der Verwendung abgeleitet werden. Versuchen Sie, die Typargumente explizit anzugeben.

Dies schlägt fehl:

%Vor%

Aber das funktioniert:

%Vor%

oder:

%Vor%

Ist es möglich, dies ohne Gießen zu tun, z.B. (List<MyStruct>)stream.Deserialize() ?

Aktualisierung:
Die Verwendung von stream.Deserialize<List<MyClass.MyStruct>>() führt zu einem Fehler:

%Vor%

Update 2 (Beispiel-Konsolen-App) - einmal ausführen, um die Datei zu erstellen, um sie erneut zu lesen

%Vor%     
SamWM 01.06.2010, 12:21
quelle

3 Antworten

8

Ich nehme an, dass Sie Ihre Erweiterungsmethode wie folgt aufrufen:

%Vor%

In diesem Fall kann der Compiler das T für Deserialize nicht bestimmen (es schaut nicht auf die Variable, der das Ergebnis des Methodenaufrufs zugewiesen ist).

Sie müssen also das Argument type explizit angeben:

%Vor%

Das funktioniert:

%Vor%     
dtb 01.06.2010, 12:24
quelle
1

Sie können Ihre ursprüngliche generische Methode verwenden, Sie müssen nur den generischen Typ explizit so angeben ...

%Vor%     
Jason Punyon 01.06.2010 12:25
quelle
1

Sie serialisieren den Typ der Liste und nicht die tatsächliche Liste. Es sollte sein:

%Vor%

Außerdem müssen Sie MyStruct als Serializable markieren, damit es korrekt serialisiert wird.

    
Adam Hughes 01.06.2010 15:46
quelle

Tags und Links