2016-07-01 10 views
1

Ich habe viele Daten mit ProtoBuf in C# Serialisiert.Kann ich DeserializeWithLengthPrefix eine C# -Klasse in eine Python-Klasse?

Ein Kollege möchte diese Dateien mit Python lesen.

Kann dies erreicht werden als Python-Klassen nicht gleich wie C#. Hier

ist die C# -Klasse:

[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; 
} 

Antwort

0

, die wie protobuf-net aussieht; Glücklicherweise enthält die Bibliothek ein Werkzeug, um das Proto-Schema für auszuspucken, was es denkt, dass Ihr Modell:

var schema = Serializer.GetProto<TickRecord>(); 

, die kommt als:

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]; 
} 

wo bcl.DateTime ist ein protobuf-net komplexe Daten Typ beschrieben in "bcl.proto".

Ehrlich gesagt, schlage ich vor, Ihre Datum-Uhrzeit auf eine long mit Unix-Zeit zu ändern - es wird die Dinge hier viel einfacher machen. Das gibt Ihnen:

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]; 
} 

, die Sie Ihren Kollegen geben können, und sie können protoc oder was auch immer andere Plattform/Bibliothek Werkzeug sie benötigen für die Protokoll-Puffer in ihrer Umgebung ausgeführt werden, und sie sollten eingestellt werden. Das Serialisierungsformat ist absichtlich plattformübergreifend, so dass die Daten gut funktionieren sollten.


Hinweis: *WithLengthPrefix Werke, indem die Daten in einer äußeren Hülle gewickelt wird. Ich muss die genauen Parameter sehen, die Sie verwenden, um zu beraten, wie Sie Ihren Kollegen beraten können.

Hinweis: Änderung der DateTime zu long ist eine brechende Änderung; Wenn Sie das nicht können, muss Ihr Kollege bcl.proto (einfach Google) anschauen und in Python übersetzen.

Verwandte Themen