為此,我廢了好大的腦子,畢竟開局乙個文件(引數名和實際給我的引數名都不一致),剩下全靠摸索;
弄懂了之後,其實也沒這麼複雜。一開始我用proto 3.0.0 和 3.6.1版本封裝,不行,因為對方介面要求版本2.x;
在google搜到發現貌似protobuf早期版本不支援c#,所以蛋蛋很是憂傷;後來找到乙個proto-net版,編譯後請求還是不行;
歷經幾天苦逼的摸索,下面直接給**
proto檔案:
package test;序列化和反序列化/*聚屏**接入api文件,介面版本: 6.0.0
*///
作業系統型別
enum
ostype ;
//版本號資訊
message version ;
//唯一使用者標識,必需使用明文,必需按要求填寫,具體填寫指導詳見介面說明文件
enum
udidtype :[0-9a-f]:[0-9a-f]:[0-9a-f]:[0-9a-f]:[0-9a-f]
media_id = 2; //
**內部維護的唯一id,僅對少部分**開放,預設僅允許mac id
}message udid ;
//二維尺寸資訊
message size ;
message device
//wifi熱點資訊
message wifiap :[0-9a-f]:[0-9a-f]:[0-9a-f]:[0-9a-f]:[0-9a-f]
optional int32 rssi = 2; //
必填!熱點訊號強度,通常是負數
optional bytes ap_name = 3; //
必填!熱點名稱,可不傳遞,建議傳遞當前接入熱點的名稱,用於判斷使用者當前所處場所,中文需要utf-8編碼
};//
gps資訊
message gps ;
optional coordinatetype coordinate_type = 1; //
必填!座標型別
optional double longitude = 2; //
必填!經度
optional double latitude = 3; //
必填!緯度
};//
網路環境資訊
message network ;
//運營商代號,每個運營商唯一(plmn碼每個運營商可能有多個)
enum
operatortype
optional bytes ipv4 = 1; //
optional connectiontype connection_type = 2; //
必填!網路連線型別,用於判斷網速
optional operatortype operator_type = 3; //
必填!移動運營商型別,用於運營商定向廣告
};//
物料型別
enum
materialtype
//**的使用者特徵資料
message userinfo
//裝置探針資料
message probeinfo
message slotinfo
message tsapirequest
//廣告物料元資料資訊
message materialmeta ;
//廣告效果跟蹤資訊
message tracking ;
optional trackingevent tracking_event = 1; //
被跟蹤的廣告展示過程事件
repeated bytes tracking_url = 2; //
事件監控url
};message ad
message tsapiresponse
data da = new
data();
using (var fs = file.create("
d:\\da.bin
"))//
檔案輸出流
protobuf序列化儲存
之前做的乙個專案,為了提速,用到了序列化儲存。下面是乙個protobuf的使用示例。include person.pb.h include iostream include fstream include time.h pragma comment lib,libprotobuf.lib pragm...
C 使用protobuf簡述
首先,建立乙個c 4.5以上project,因為最新的protobuf依賴於c 5.0的語言特性。然後,我們通過nuget,為專案新增對protobuf的引用,搜尋protobuf就可以開始安裝了。安裝完成後,可以編譯一次工程,在bin debug目錄下就可以拿到google.protobuf.dl...
關於C 呼叫VC DLL
由於在c 呼叫vc的dll檔案不能直接引用,那麼,我們可以通過以下辦法解決。dll檔案分為託管和非託管,在呼叫託管的很好辦,直接被使用的需要引用,間接使用的需要拷貝到bin目錄下.非託管的處理會比較麻煩,實際上,你拷貝到bin沒有任何幫助,因為clr會把檔案拷貝到乙個臨時目錄下,然後在那執行web,...