天天看點

8,協定序列化元件NewLife.Serialization

<?xml:namespace prefix = o />

在開發某些需要跟第三方平台互動的項目時,往往需要解析或者構造符合對方協定要求的資料格式,該操作在.Net中有個很漂亮的名字——序列化!

在實際使用中,XML序列化用得比較多,二進制序列化也不錯,隻是可控性很低。當然,對于要序列化指定協定的格式而言,它們就幾乎幫不上忙了。于是有了“協定序列化元件NewLife.Serialization”。

協定序列化類ProtocolFormatter的主旨是實作二進制格式資料和.Net實體資料之間的靈活轉換!

使用上非常簡單,下面通過實作一個簡單的消息類來反序列化手機QQ2008(Mobile)的聊天記錄。

建立一個控制台項目,引用NewLife.Serialization.dll。加入下面的代碼:

第一步執行個體化一個ProtocolFormatter對象,這裡指定了類型為Message;

第二步執行個體化一個Message對象,這點跟許多元件的反序列化不同,因為有時候外部已經準備好了一個對象,反序列化隻需要填充就可以了;

第三步就是序列化,這裡傳入第二步執行個體化的對象。如果這裡傳入對象,第一步執行個體化ProtocolFormatter的時候,就可以不用指定類型了;這裡也可以不傳入對象,Deserialize方法内部會執行個體化一個傳回。

下面我們看看Message類:

Message類主要包含三大部分:

第一是屬性,這點從分析手機QQ2008聊天記錄檔案的格式可以得出。我是一邊試一遍猜,猜出來的;

第二是重點。這個類實作了IProtocolSerializable接口,通過OnDeserializing來改變反序列化的行為,某些屬性需要特殊處理的,就在這裡處理。

第三部分是處理聊天記錄裡面的表情,這個可有可無。

Message類上面有個ProtocolSerialProperty特性,指定反序列化的時候,分析屬性,而不是預設的分析字段。這裡指定分析屬性,隻是為了友善下面寫代碼判别名稱。

執行效果如下:

8,協定序列化元件NewLife.Serialization

協定序列化元件完全通過反射實作,層層深入,是以性能非常差!我們主要用來序列化BT種子以及各種用于網絡傳輸的指令,因為指令對象簡單,性能上還可以接受。

大石頭

新生命開發團隊

2010-09-29 10758

<a href="http://files.cnblogs.com/nnhy/%E5%8D%8F%E8%AE%AE%E5%BA%8F%E5%88%97%E5%8C%96%E7%BB%84%E4%BB%B6%E7%A4%BA%E4%BE%8BQQ2008_20100929182855.rar">元件示例下載下傳</a>

我不相信神話,我隻相信汗水!我不相信命運,我隻相信雙手!