我正在寻找C#中序列化的语言支持。我可以从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;
}
}
}
我有一个通用的框架结构,作为多种负载类型的包装器,用于串行传输。ModemStatus是这样一种负载的例子。
然而,运行TestSerialization()会返回一个长度为382字节的缓冲区(不含期望内容)!它应该包含6个字节。是否可能在没有手动序列化的情况下正确地序列化这些数据?