2014-06-16 73 views
0

我正在用套接字通信構建C#服務器和python客戶端應用程序。服務器將序列化的對象列表發送給客戶端,但是我不知道(也找不到)如何在python中反序列化列表。任何幫助,將不勝感激。反序列化使用protobuf的對象列表

+0

您是否嘗試過使用['pickle'](https://docs.python.org/2/庫/ pickle.html#子類,unpickle程序)? – BeetDemGuise

+1

你有什麼試過的?你真的在服務器端使用'protoobuf'嗎?您是否試過[教程](https://developers.google.com/protocol-buffers/docs/pythontutorial)? –

+0

是的,我正在使用protobuf。我可以沒有問題地反序列化單個對象,但我不知道如何使用列表來完成它。這就是爲什麼我不能嘗試任何東西,因爲我不知道。 @DarinDouglass我是python的新手,但我猜pickle不會和.net聊天。這就是爲什麼我使用protobuf – Davita

回答

4

還好吧,我找到了解決辦法,如果有人有興趣。訣竅是創建一個新的消息類型,並重復添加原來的消息類型。以下是如何

message TransactionPackets { 
    repeated TransactionPacket packet = 1; 
} 

message TransactionPacket { 
    required int32 trans_id = 1; 
    required string user_id = 2; 
    required int64 date = 3; 
} 

現在,我可以簡單地通過調用TransactionPackets.ParseFromString反序列化對象的列表()

0

檢查此:

「協議緩存線格式不是自定界,所以協議緩衝分析器不能確定在何處的消息上他們自己的目的,以解決這個問題的最簡單的方法是寫的大小每個消息在你寫消息本身之前,當你讀回消息時,你讀取大小,然後將字節讀入一個單獨的緩衝區,然後從該緩衝區解析出來。

https://developers.google.com/protocol-buffers/docs/techniques

+0

我正在使用protobuf-net。我不知道它是如何序列化數據和/或它放置每個消息的大小:( – Davita