【发布时间】:2013-11-26 16:00:37
【问题描述】:
我正在为我的类编写自定义序列化程序,它应该将类对象序列化为字节数组。以下是我的示例代码:
[StructLayout(LayoutKind.Sequential)]
public class ATTRIBUTE_STR
{
public uint atType;
public uint atLen;
public byte[] atData = new byte[3];
public byte[] serialize()
{
byte[] temp = new byte[Marshal.SizeOf(this)];
byte[] buffer = BitConverter.GetBytes(atType);
Array.Copy(buffer, 0, temp, 0, buffer.Length);
buffer = null;
buffer = BitConverter.GetBytes(atLen);
Array.Copy(buffer, 0, temp, 4, buffer.Length);
Array.Copy(this.atData, 0, temp, 8, this.atData.Length);
return temp;
}
};
但是,字节数组 atData 因为它是如何以字节对齐方式存储在内存中的,所以它没有正确地进入临时字节数组。由于字节数组具有均匀的字节对齐。
我如何序列化这个对象以考虑内存中成员的对齐方式?
编辑:我知道还有其他选项,例如 Marshalling 或 ProtocolBuffers,但我想使用我的自定义序列化程序。
【问题讨论】:
-
您的意思是使用
struct而不是class?您可以通过Marshal.OffsetOf()获取非托管内存中的结构偏移量 -
不,我的意思是一堂课。
-
“我认为它没有被正确地复制到字节数组中。” - 你能解释一下你的实际问题吗?
-
我已经在问题中编辑了它
-
您将“不正确”更改为“不正确”,这几乎没有帮助。显示您希望在数组中出现的内容以及实际存在的内容。
标签: c# arrays serialization