2017-10-10 16 views
0

はpythonでいるProtobuf入門メッセージをデシリアライズすることはできません。のpythonいるProtobufは、私は奇妙な問題に直面し

単純なメッセージプロト定義は次のとおりです。

syntax = "proto3"; 
package test; 

message Message { 
    string message = 1; 
    string sender = 2; 
} 

protoc -I . --python_out=generated message.protoを経由して生成され、同様にPythonでアクセス:

from generated.message_pb2 import Message 

それから私は、メッセージ

を構築することができます

が、デシリアライズは

s_m = m.SerializeToString() 
print(s_m) # prints fine 
a = m.ParseFromString(s_m) 
a.foo #fails with error - no attributes deserialized 

答えて

2

代わりの

a = m.ParseFromString(s_m) 
a.foo 

この

a = m.FromString(s_m) 
print a.sender 

が代わりにあなたがこの

m2 = Message() 
m2.ParseFromString(s_m) 
print m2.sender 
012を行うことができない結果を返しません。

違いは、FromStringは文字列から逆シリアル化された新しいオブジェクトを返しますが、ParseFromStringは文字列を解析してオブジェクトのフィールドを設定することです。

関連する問題