using System;
using System.IO;
using ProtoBuf;
namespace SensorServerPro
{
class Common
{
/// <summary>
/// 傳遞過來的類型序列化成byte[]
/// </summary>
/// <typeparam name="T">傳遞的類型</typeparam>
/// <param name="instance">類型對象</param>
/// <returns>傳回instance轉換成的byte[]</returns>
public static byte[] Serialize<T>(T instance)
{
byte[] bytes = null;
using (var ms = new MemoryStream())
{
Serializer.Serialize<T>(ms, instance); //ms流對象,instance轉換成byte數組會存儲在ms裡面。《序列化》
bytes = new byte[ms.Position]; //為bytes執行個體化一個長度(傳遞過來的類型轉換成(byte)數組之後的長度)ms.position(ms流對象的長度)
var fullBytes = ms.GetBuffer(); //擷取儲存在記憶體流裡面的位元組資料
Array.Copy(fullBytes, bytes, bytes.Length); //将儲存在 fullBytes記憶體流裡的資料拷貝到bytes裡。
}
return bytes;
}
/// <summary>
/// 将傳遞過來的bytes[]反序列化成T類型
/// </summary>
/// <typeparam name="T">反序列化成的類型</typeparam>
/// <param name="bytes">byte[]</param>
/// <returns>傳回一個定義好的類型,内部存儲要傳輸的資料</returns>
public static T DeSerialize<T>(byte[] bytes)
{
using (var ms=new MemoryStream(bytes)) //(聲明一個記憶體流對象)
{
return Serializer.Deserialize<T>(ms); //《反序列化》
}
}
}
}
using ProtoBuf;
[ProtoContract]
class PlayerData
{
[ProtoMember(1)]
public float px { get; set; }
[ProtoMember(2)]
public float py { get; set; }
[ProtoMember(3)]
public float pz { get; set; }
[ProtoMember(4)]
public float rx { get; set; }
[ProtoMember(5)]
public float ry { get; set; }
[ProtoMember(6)]
public float rz { get; set; }
}
當然,在進行系列操作的時候你還需要先導入ProtoBuf的Dll檔案。檔案我這裡就不上傳了百度的到的