c# - 序列化和反序列化数据的正确方法?
问题描述
我有一个类数据数组,我将其序列化为字节数组,然后将其推送到数据库中。该程序在夜间按计划运行。另一方面,我有另一个程序将这些数据从数据库中提取出来,将其处理成报告——或者至少这是计划。该类包含在 2 个命名空间中,第一个是应用程序名称,第二个只是用来保存我的结构的东西。比如下面。
namespace FibreTrend
{
namespace Structures
{
[Serializable]
public class Trend
{
public Trend(DateTime date, string ref, int port)
{
Date = date;
Reference = ref;
PortNo = port;
}
public DateTime Date;
public string Reference;
public int PortNo;
}
}
}
{
// Function to take the trendData list, convert it to a byte array
// List<Structures.Trend> trendData;
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream mStream = new MemoryStream())
{
bf.Serialize(mStream, trendData.ToArray());
byte[] b = mStream.ToArray();
// code that pushes the array into the database...
}
}
我有一个完全独立的应用程序,它从数据库中读取数据作为字节数组。然后我将它从字节转换回我的数据类。
using (MemoryStream mStream = new MemoryStream())
{
BinaryFormatter binaryFormat = new BinaryFormatter();
mStream.Write(data, 0, data.Length);
mStream.Seek(0, SeekOrigin.Begin);
Structures.Trend[] obj = (Structures.Trend[])binaryFormat.Deserialize(mStream);
}
这是我的错误。它告诉我它希望 FibreTrend 二进制文件反序列化数据。为什么??我的趋势类是相同的大小,相同的数据布局,它是从我的其他项目中精确复制和粘贴的。为什么它坚持需要我的其他二进制文件在伴侣中。当我确实将二进制文件与它一起放入时,然后将其反序列化为一个对象,它以 FibreTrend.Structures.Trend[] 的形式出现。我显然不会包含其他二进制文件,我也不会双重处理将其转换为 Report.Structures.Trend[] 的数据。它只是一个 1 和 0 的流,为什么我不能将它推送到我认为我想要的任何类中,这不是演员表的目的是告诉编译器我希望数据如何排序和结构化吗?
解决方案
推荐阅读
- javascript - TweetNaCl.js 最小公钥签名示例
- python - 将字典附加到具有不同值相同键的列表
- python - 从文件夹中导入所有模块,从所有已知名称的模块中执行功能
- c++ - 在不知道缓冲区大小的情况下从套接字读取
- vue.js - 在 vuejs3 中显示异步数据的属性
- python - Python/CMD - 使用非常特定的文本文件作为输入时出现奇怪的特定错误
- javascript - 如果 API id 参数不存在,请再次检查
- java - 我怎样才能让这个程序返回一个结果?
- c# - 使用 dinkToPdf 时无法解析 dot net core 2.0 Web 应用程序中的“SynchronizedConverter”
- python - 拆分地址的方法?多个分隔符?