将POCO序列化为简单字节数组

时间:2016-08-28 17:22:02

标签: c# protobuf-net binary-serialization

我需要序列化以下类型

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 个答案:

答案 0 :(得分:0)

我写了自己的IFormatter,这与ToByteArray()FromByteArray()基本相同。谢谢!