【发布时间】:2009-03-10 03:24:31
【问题描述】:
我正在寻找 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;
}
}
}
我有一个通用的 Frame 结构,作为许多类型有效负载的包装器,用于串行传输。 ModemStatus 是此类有效负载的一个示例。
但是,运行 TestSerialization() 会返回一个长度为 382 字节的缓冲区(没有预期的内容)!它应该包含 6 个字节。是否可以在不手动序列化的情况下正确序列化这些数据?
【问题讨论】:
-
一个类似的问题有很多答案:stackoverflow.com/q/3278827/5114784
标签: c# serialization