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文件,如果将整个文件保存到磁盘只需要几分之一秒,那么这种理论上的低效率可能毫无意义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |