C# Structure Serialisieren in WCF

Fou-Lu

Lt. Junior Grade
Registriert
Aug. 2006
Beiträge
290
Hallo cbler,
ich hätte da ein Problem bei dem ich selber nun echt nicht mehr weiter komme.

Es ist folgendes...

...ich hab mir ne structure definiert mit der ich speicherblöcke auslese. Diese datenblöcke vom typ dieser structure speichere ich dann als Objekte in eine ArrayList.

Diese ArrayList serialisiere ich dann mit dem BinaryFormatter und speichere es in ein byte-array. Das Byte-Array verschicke ich dann an einen Client und dieser soll mir dann aus dem Byte-Array das ursprüngliche ArrayList erstellen (in diesem ArrayList sind wie schon gesagt, mehrere Objekte vom Typ dieser struct drin).

Auf der Serverseite klappt auch alles ganz gut, aber auf der Clientseite gibts ne "SerializationException" beim Deserealisieren!!

Bei folgender Zeile:

PHP:
Object obj = (Object)bf.Deserialize(ms);

Die genau Exception lautet:

Der für die Deserialisierung eines Objekts mit dem Typ "WCFService+mystruct" erforderliche Konstruktor wurde nicht gefunden.

WCFService ist meine Klasse auf der Serverseite in der die Funktionen und die Structure für den WCF Dienst definiert sind (die Exception wird auf der Clientseite ausgespuckt).

Meine Structure sieht so aus in der Klasse:
PHP:
[Serializable()]
unsafe struct mystruct : ISerializable {
       ...
}

Einen Konstruktor in der Struct hab ich versucht zu deklarieren, aber ein parameterloser Konstruktor ist ja ungültig und mit Parametern hats nichts geholfen.

Ich hab auch schon statt der struct -> class probiert, aber da ich diese structure ja als Datentyp hernehme und auf Pointer zugreife damit, wirft mir eine "class" Compilerfehler weil ich damit nicht auf Pointer zugreifen bzw. die Klasse selber nicht als Pointer verwenden darf.

Hoffe ihr könnt mir hier weiterhelfen und paar Ratschläge/Tipps geben das Problem zu lösen.
 
Da deine Struktur "ISerializable" implementiert, musst du auch einen besonderen "Deserialisierungskonstruktor" definieren, der die "Umkehrung" von "GetObjectData" ist.
Code:
[Serializable]
unsafe struct mystruct : ISerializable 
{
    public mystruct(SerializationInfo info, StreamingContext context)
    {
          // Deserialisierung vornehmen
    }
}
Hier noch ein etwas umfangreicheres Beispiel: How to implement ISerializable, the serialization constructor, and the GetObjectData method
 
Achsoooo... nach dem Konstruktor hat der verlangt :D

Aber mal ne Frage. Muss ich den die Deserialisierung unbedingt in diesem Konstruktor vornehmen? Kann ich den nicht einfach leer lassen?

Ich hab die GetObjectData hab ich ja auch leer gelassen.

PS: nicht wundern für die Frage. Kanns grad nicht ausprobieren, hab die Dateien aufm Rechner daheim ^^
 
Fou-Lu schrieb:
Ich hab die GetObjectData hab ich ja auch leer gelassen.
Dann musst du aber auch "ISerializable" nicht implementieren. Das Interface ist nur nötig wenn du die Serialisierung beeinflussen willst.
Wenn du einfach nur mit der "Standardmethode" serialisieren willst reicht das "Serializable"-Attribut völlig aus. Ohne "ISerializable" kannst du dir dann auch den speziellen Konstruktor sparen.
 
Aso. Ok vielen dank für die Aufklärung =)
Ich hab nämlich kaum was gefunden gehabt zu dem Thema.
 

Ähnliche Themen

Antworten
11
Aufrufe
1.747
V
Zurück
Oben