Я ищу языковую поддержку сериализации в С#. Я мог бы получить от ISerializable и реализовать сериализацию, скопировав значения членов в байтовый буфер. Однако я бы предпочел более автоматический способ, как это можно сделать в C/C++.
Рассмотрим следующий код:
using System;
using System.Text;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace XBeeHelper
{
class XBee
{
[Serializable()]
public struct Frame<FrameType> where FrameType : struct
{
public Byte StartDelimiter;
public UInt16 Lenght;
public Byte APIIdentifier;
public FrameType FrameData;
public Byte Checksum;
}
[Serializable()]
public struct ModemStatus
{
public Byte Status;
}
public Byte[] TestSerialization()
{
Frame<ModemStatus> frame = new Frame<ModemStatus>();
frame.StartDelimiter = 1;
frame.Lenght = 2;
frame.APIIdentifier = 3;
frame.FrameData.Status = 4;
frame.Checksum = 5;
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, frame);
Byte[] buffer = stream.ToArray();
return buffer;
}
}
}
У меня есть общая структура Frame, действующая как оболочка для многих типов полезной нагрузки для последовательной передачи. ModemStatus является примером такой полезной нагрузки.
Однако запуск TestSerialization() возвращает буфер длиной 382 байта (без ожидаемого содержимого)! Он должен содержать 6 байт. Можно ли правильно сериализовать эти данные без ручной сериализации?