如何在c#中最好地序列化一个实体列表
本文关键字:一个 列表 实体 序列化 | 更新日期: 2023-09-27 18:06:53
我有以下方法来序列化一个类列表到磁盘:
private static void Serialize(List<CcmAlarmUalUsl> entityList)
{
try
{
using (Stream stream = File.Open("CcmAlarmUalUsl.dat", FileMode.Create))
{
BinaryFormatter bin = new BinaryFormatter();
bin.Serialize(stream, entityList);
}
}
catch (IOException)
{
}
}
我要序列化的实体类是这样的:
public class CcmAlarmUalUsl
{
public string SubId { get; set; }
public System.DateTime TimeOfAlarm { get; set; }
public int AlarmType { get; set; }
}
我的Serialize类是将实体列表序列化到磁盘的最佳方式吗?这并不需要是人类可读的。它将严格由应用程序使用,作为内部缓存的存储手段。不需要数据库存储
我也有点担心何时修改CcmAlarmUalUsl的结构。我可以在类的末尾添加属性。这将如何影响现有的缓存项?
最好的方法,取决于你的应用需求。二进制序列化(标准的)在硬盘上使用的内存方面通常是便宜的,但不是很可扩展,因为当您重构代码时,您将面临先前保存的二进制文件的反序列化问题。这是可以解决的,但我个人不喜欢这种方法,尽量避免。
考虑:
- XML序列化
- Json序列化
- 用一些轻量级的ORM保存对象到SQLite数据库。
- 自定义二进制序列化…
还有很多其他类型,但我认为这些类型在这些日子里更容易被化解。
简单的答案-不。您的代码无法编译(lizards1
?? ?)并且您的CcmAlarmUalUs1
类没有标记为可序列化(运行时错误)。将CcmAlarmUrlUs1
类标记为可序列化的,将lizards1
更改为entityList
,它应该工作,看起来你做得很好。