2009-08-17 10 views
1

Kann ich ein Objekt in der Silverlight 3.0-Laufzeit deserialisieren, das mit der vollständigen .NET 2.0-Laufzeit unter Verwendung von BinaryFormatter serialisiert wurde? Ich verwende den folgenden Code ein Objekt in ein ByteArray zu serialisiert, die wir auf eine DB-Tabelle schreiben:Silverlight 3.0 Unterstützung für die binäre Serialisierung?

 MemoryStream serStream = new MemoryStream(); 
     BinaryFormatter binFormatter = new BinaryFormatter(); 
     binFormatter.Serialize(serStream, csMetric); 


     serStream.Position = 0; 
     return serStream.ToArray(); 

Der Silverlight-Client muss dann diese binären Daten aus dem DB abgerufen werden (über einen Web-Service-Aufruf) und deserizlize die Bytes zurück in eine Instanz der csMetric-Klasse.

Ist das möglich? Wenn ja, wie läuft das auf dem Client ab, wenn der BinaryFormatter nicht in der SL 3.0 Runtime verfügbar ist?

Danke, jon

Antwort

0

Da Sie durch WCF gehen, und damit der vollständige .NET Framework, um die Daten in Silverlight zu bekommen sowieso würde ich empfehlen, das Objekt auf dem Server Deserialisieren, bevor es zurück zum Senden Silverlight. Der Silverlight 3-WCF-Stapel unterstützt die binäre WCF-Codierung, die den Datentransfer einigermaßen effizient machen soll.

+0

Danke James ... das ist es, was wir gerade tun, aber es beinhaltet einen zusätzlichen Serialisierungs-/Deserialisierungssprung auf dem WCF-Dienst. Wir möchten das vermeiden, indem wir den WCF-Service einfach die Bytes aus der DB zurückgeben und sie direkt an den SL-Client senden ... nur nicht sicher, ob das mit der SL-Laufzeit möglich ist. –

0

Jon,

Haben Sie versucht, das Objekt mit der DataContractSerializer deserialisieren? Ich habe nicht genau dieses Szenario getestet, aber das ist, wie ich es hätte nähern:

folgende ist eine Erweiterung Methode aus einem Byte-Array (byte []):

pubilc static T Deserialize<T>(this byte[] yourSerializedByteArray) 
{ 
T deserializedObject; 

DataContractSerializer serializer = new DataContractSerializer(typeof(T)); 
using(MemoryStream ms = new MemoryStream(yourSerializedByteArray)) 
{ 
    deserializedObject = (T)serializer.ReadObject(ms); 
} 

return deserializedObject; 
} 
+0

nette Idee, ich frage mich, ob es funktioniert – Neil

0

DataContractSerializer eine ganze Reihe hat Bei Problemen habe ich einen binären Serializer erstellt, der einige von ihnen entfernt (zumindest für mich!). Er verwendet Reflektion und erstellt relativ kompakte Darstellungen, die an WCF-Dienste gesendet werden können.

Weitere Informationen here.

0

Vielleicht möchte ich meine SharpSerializer versuchen. Es kann Daten sowohl im Binär- als auch im XML-Format serialisieren. Es funktioniert auf .NET Full, Compact und Silverlight.

+0

Sieht gut aus. Zu schlecht kommst du nur hierher, um es zu fördern. ( – kenny

Verwandte Themen