2009-05-22 2 views
4

私はオブジェクトCompact Frameworkを使用してオブジェクトをバイナリシリアル化するにはどうすればよいですか?

struct _NETINFO { } 

を持っていると私は[]コンパクトFrameworkを使用して、私は成功事例のせずに次のことを試してみましたバイトに変換したい:

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

そして、それは動作しません!私が見つけた他の唯一の甘美さは、CFで利用できないBinaryFormatterを使うことです!

他の訴訟はありますか?

+0

フルフレームワークからBinaryFormatterクラスを抽出するのはどうですか? – Marcel

+0

これは役に立ちます:http://www.codeproject.com/KB/cs/CF_serializer.aspx、またはhttp://www.freewebs.com/compactFormatter/About.html、またはhttp: /www.sharpserializer.com/en/download/index.html – Nik

答えて

0

構造体はどのくらい複雑ですか?あなたが他のものへのポインタを持っていないシンプルなもののために、それは非常に簡単です:

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(); 
    } 

は短いです危険なコードを使用してもバージョンがあるのですが、それは「安全でないコードを許可する」にし、何らかの理由で回す必要としますいくつかの人々をパニックにする。

ウィッシュマネージコードでは、コピーなしでこれを行うことができます(またはバイト配列を構造体に逆向きにキャストする)ことはできますが、残念ながらそれはしません。