如何在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的结构。我可以在类的末尾添加属性。这将如何影响现有的缓存项?

如何在c#中最好地序列化一个实体列表

最好的方法,取决于你的应用需求。二进制序列化(标准的)在硬盘上使用的内存方面通常是便宜的,但不是很可扩展,因为当您重构代码时,您将面临先前保存的二进制文件的反序列化问题。这是可以解决的,但我个人不喜欢这种方法,尽量避免。

考虑:

    XML序列化
  1. Json序列化
  2. 用一些轻量级的ORM保存对象到SQLite数据库。
  3. 自定义二进制序列化…

还有很多其他类型,但我认为这些类型在这些日子里更容易被化解。

简单的答案-不。您的代码无法编译(lizards1 ?? ?)并且您的CcmAlarmUalUs1类没有标记为可序列化(运行时错误)。将CcmAlarmUrlUs1类标记为可序列化的,将lizards1更改为entityList,它应该工作,看起来你做得很好。

不过你的问题有点模糊。说到"最好",你指的是什么?如果不知道这些,就很难给出一个好的答案。