2016-07-01 12 views
1

私はC#でProtoBufでシリアライズされたデータをたくさん持っています。DeserializeWithLengthを使用して、C#クラスをPythonクラスに追加できますか?

同僚は、これらのファイルをPythonで読んでみたいです。

これは、C#と同じではないPythonクラスとして実現できますか?ここで

は、C#クラスである:

[ProtoContract] 
    public class TickRecord 
    { 
     [ProtoMember(1, DataFormat = DataFormat.FixedSize, IsRequired = true)] 
     public DateTime DT; 
     [ProtoMember(2, DataFormat = DataFormat.FixedSize, IsRequired = true)] 
     public double BidPrice; 
     [ProtoMember(3, DataFormat = DataFormat.FixedSize, IsRequired = true)] 
     public double AskPrice; 
     [ProtoMember(4, DataFormat = DataFormat.FixedSize, IsRequired = true)] 
     public int BidSize; 
     [ProtoMember(5, DataFormat = DataFormat.FixedSize, IsRequired = true)] 
     public int AskSize; 
} 

答えて

0

protobuf-netのように見えます。幸い、ライブラリは、それはあなたのモデルを考えて何のため.protoスキーマを吐き出すためのツールが含まれています

として出てくる
var schema = Serializer.GetProto<TickRecord>(); 

bcl.DateTimeがいるProtobuf-netの複雑なデータである
message TickRecord { 
    required bcl.DateTime DT = 1; 
    required double BidPrice = 2 [default = 0]; 
    required double AskPrice = 3 [default = 0]; 
    required sfixed32 BidSize = 4 [default = 0]; 
    required sfixed32 AskSize = 5 [default = 0]; 
} 

typeは "bcl.proto"で説明しています。

率直に言えば、あなたの日時をunix時間を使ってlongに変更することをお勧めします。

message TickRecord { 
    required sfixed64 DT = 1 [default = 0]; 
    required double BidPrice = 2 [default = 0]; 
    required double AskPrice = 3 [default = 0]; 
    required sfixed32 BidSize = 4 [default = 0]; 
    required sfixed32 AskSize = 5 [default = 0]; 
} 

あなたの同僚に与えることができた、と彼らは自分の環境では、プロトコル・バッファーのために必要protocまたは任意の他のプラットフォーム/ライブラリツールを実行することができ、そしてそれらを設定する必要があります:それはあなたを与えます。シリアル化形式は意図的にクロスプラットフォームなので、データは正常に動作するはずです。


注:*WithLengthPrefixは、外部シェルでデータをラップすることで機能します。私はあなたの同僚に助言する方法をアドバイスするために使用している正確なパラメータを確認する必要があります。

注:DateTimelongに変更することは大きな変更です。あなたがそれを行うことができないなら、あなたの同僚はbcl.proto(ちょうどGoogleそれ)を見て、それをPythonに翻訳しなければならないでしょう。

関連する問題