Tôi đang tìm hỗ trợ ngôn ngữ của tuần tự hóa trong C#. Tôi có thể lấy được từ ISerializable và thực hiện tuần tự hóa bằng cách sao chép các giá trị thành viên trong một bộ đệm byte. Tuy nhiên, tôi thích một cách tự động hơn giống như người ta có thể làm trong C/C++.Byte để tuần tự hóa byte của một cấu trúc trong C#
Xét đoạn mã sau:
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;
}
}
}
Tôi có một diễn xuất Khung struct chung như là một wrapper cho nhiều loại tải trọng, để truyền nối tiếp. ModemStatus là một ví dụ về tải trọng như vậy.
Tuy nhiên, chạy TestSerialization() trả về bộ đệm byte dài (không có nội dung mong muốn)! Nó phải có chứa 6 byte. Có thể tuần tự hóa dữ liệu này một cách chính xác mà không cần sắp xếp theo cách thủ công không?
Bạn có thể đã viết rằng trong nửa mã ... – leppie
Xin lỗi để khai thác quá khứ nhưng mã này là khủng khiếp. XmlSerializer không phải là IDisposable nên không thể sử dụng câu lệnh.'MemoryStream() mới được tạo ra và xử lý, nhưng không bao giờ được sử dụng. 'memoryStream' được gán cho hai lần, nó sẽ không biên dịch vì là một phần của câu lệnh using. 'UTF8ByteArrayToString()' và 'StringToUTF8ByteArray()' chỉ không được định nghĩa ở bất kỳ đâu. Có lẽ bạn có thể dành thời gian để sửa nó ngay bây giờ bạn có nhiều kinh nghiệm hơn? –