2009-05-22 13 views
4

IWie binäre binäre Serialisierung eines Objekts mit Compact Framework?

struct _NETINFO { } 

und ich möchte konvertieren es [zu einem Byte] mit Compact Framework ein Objekt haben, habe ich versucht, die folgenden ohne Erfolg:

_NETINFO info = new _NETINFO(); 
byte[] buffer = (byte[])info; 

Und es funktioniert nicht! Die einzige andere Überdosierung, die ich gefunden habe, ist die Verwendung des BinaryFormatter, der in CF nicht verfügbar ist!

Irgendwelche anderen Vorschläge?

+0

Was ist mit dem Extrahieren der BinaryFormatter-Klasse aus dem vollständigen Framework? – Marcel

+0

Sie können dies nützlich finden: http://www.codeproject.com/KB/cs/CF_serializer.aspx, oder dies: http://www.freewebs.com/compactFormatter/About.html, oder dies: http://www.sharpserializer.com/de/download/index.html – Nik

Antwort

0

Wie komplex ist die Struktur? Für einfache Dinge, wo man nicht Zeiger auf andere Sachen hat, ist es ziemlich einfach:

var info = new _NETINFO(); 
    var buffer = new byte[Marshal.SizeOf(info)]; 
    var handle = GCHandle.Alloc(info, GCHandleType.Pinned); 
    try 
    { 
     Marshal.Copy(handle.AddrOfPinnedObject(), buffer, 0, buffer.Length); 
    } 
    finally 
    { 
     handle.Free(); 
    } 

Es gibt auch eine Version unsicheren Code verwenden, die kürzer ist, aber das erfordert auf „erlauben unsicheren Code“ und aus irgendeinem Grunde drehen, dass macht manche Leute in Panik.

Wish Managed Code erlaubt dies ohne die Kopie (oder umgekehrt - Gießen eines Byte-Array zu einer Struktur), aber leider tut es nicht.

Verwandte Themen