加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 将单个对象插入json文件而不重写整个文件

发布时间:2020-12-15 23:28:31 所属栏目:百科 来源:网络整理
导读:我正在研究一种方法,该方法使用 JSON.NET将马对象添加到 JSON格式的马数据库中.一种选择是将整个文件反序列化为马匹列表,添加新马,然后序列化列表并重写整个文件.我在下面的代码中实现了这种方法. // adds a horse to the db public int AddHorse(Horse hors
我正在研究一种方法,该方法使用 JSON.NET将马对象添加到 JSON格式的马数据库中.一种选择是将整个文件反序列化为马匹列表,添加新马,然后序列化列表并重写整个文件.我在下面的代码中实现了这种方法.

// adds a horse to the db
    public int AddHorse(Horse horse)
    {
        // identify and assign next available id to horse
        var horses = GetAllHorses();
        int nextId = horses.Max(h => h.ID) + 1;
        horse.ID = nextId; 

        // Add horse to list
        horses.Add(horse);

        // Write entire list to JSON file. Can I just insert one new horse into the file?
        using (FileStream fs = File.Open(_jsonHorseDbFilePath,FileMode.Create))
        using (StreamWriter sw = new StreamWriter(fs))
        using (JsonWriter jw = new JsonTextWriter(sw))
        {
            jw.Formatting = Formatting.Indented;

            JsonSerializer serializer = new JsonSerializer();
            serializer.Serialize(jw,horses);
        }

        return nextId;
    }

虽然这有效,但对我来说似乎效率低下.理想情况下,我可以简单地将新的Horse对象插入JSON文件而无需重写所有内容.但是,我一直在谷歌四处寻找,并没有找到办法做到这一点.有谁知道这是否可能,如果是的话,在这种情况下我怎么可能接近它?

解决方法

JSON不是数据库格式,磁盘上的JSON文件只是一个平面文件,其数据恰好是结构化的,允许您将其作为对象在内存中处理.但是在磁盘上,它只是一个文本文件,并且文件系统不是为了有效地将数据插入到文件中间而设计的,而不是没有非常棘手的操作文件系统本身,正如 the answers here所建议的那样.

是的,这是低效的.如果您想要高效,请使用专为更新而设计的数据库.但是,对于相对较小的JSON文件,如果将整个文件保存到磁盘只需要几分之一秒,那么这种理论上的低效率可能毫无意义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读