2016-08-28 7 views
1

に私はこのような単純なバイナリ配列に、次のように入力しSerializeをPOCO単純なバイト配列

public class MspMessage { 
    [DataMember(Order = 1), ProtoMember(1)] 
    public byte[] Prefix { get; private set; } 
    [DataMember(Order = 2), ProtoMember(2)] 
    public MspMessageType MessageType { get; private set; } 
    [DataMember(Order = 3), ProtoMember(3)] 
    public int DataLength { get; private set; } 
    [DataMember(Order = 4), ProtoMember(4)] 
    public MspCodes MspCode { get; private set; } 
    [DataMember(Order = 5), ProtoMember(5)] 
    public byte[] Data { get; private set; } 
    [DataMember(Order = 6), ProtoMember(6)] 
    public byte Checksum 
    { 
     get; private set; 
    } 

    public MspMessage(MspMessageType messageType, MspCodes mspCode, byte[] data) { 
     Prefix = new byte[] { 36, 77 }; 
     MessageType = messageType; 
     MspCode = mspCode; 
     Data = data; 
     DataLength = data?.Length ?? 0; 

     if (data == null || data.Length == 0) { 
      Checksum = (byte)(0^(int)MspCode); 
     } else { 
      var checksum = data.Length^(int)MspCode; 

      checksum = data.Aggregate(checksum, (current, t) => current^t); 

      Checksum = (byte)checksum; 
     } 
    } 
} 

をシリアル化する必要があります:{36, 77, 60, 0, 1, 1}を。 BinaryFormatterprotobuf-netでハッキングしましたが、どちらも純粋なタイプのコンテンツのほかに出力が追加されています。これを行う最も効率的な方法は何ですか?追加フィールドを持つ派生型を作成するのは私の意図です。ありがとう!

+1

確かに、シリアル化される型に関する情報があります。 – Aybe

+1

多くの制御が必要なときは、 'byte [] ToByteArray()と'静的MspMessage FromByteArray(byte []配列) 'を追加し、それらの中にBinaryReaderとBinaryWriterをちょうど使用してください。 –

+0

Microsofts bond serealizationフレームワーク、それはあなたが試したより良いperfを持っているように見えるコンパクトバイナリシリアライザを持っています。 – loneshark99

答えて

0

私は自分自身でIFormatterを書きました。これは基本的にToByteArray()FromByteArray()と同じものです。ありがとう!

関連する問題