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

c# – 使用JSON.NET连续序列化列表

发布时间:2020-12-15 08:45:26 所属栏目:百科 来源:网络整理
导读:我正在尝试使用 JSON.NET将List序列化为C#中的文件. 我希望能够向列表中添加值并序列化该更改. 我不想再一次序列化列表,因为它可以变得非常大. JSON.NET是可以的吗? using (FileStream fs = File.Open(@"c:list.json",FileMode.CreateNew))using (StreamWr
我正在尝试使用 JSON.NET将List序列化为C#中的文件.
我希望能够向列表中添加值并序列化该更改.

我不想再一次序列化列表,因为它可以变得非常大.

JSON.NET是可以的吗?

using (FileStream fs = File.Open(@"c:list.json",FileMode.CreateNew))
using (StreamWriter sw = new StreamWriter(fs))
using (JsonWriter jw = new JsonTextWriter(sw))
{
    jw.Formatting = Formatting.Indented;

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

这样,只能对整个列表进行“重新序列化”,而不是对文件添加更改.

解决方法

在许多格式(包括json和xml)中,文档最后都是语义关闭; “追加”需要通过这种方式进行反向跟踪.在其他情况下,文件中可能存在需要更改的长度前缀数据.在任何一种情况下,只有在列表是文件中的最后一个(或唯一的)事物时才会合理地工作 – 在一般情况下不是安全的假设,因此序列化程序通常不包括对“在末尾追加”的支持.事实.

因此,我的默认答案是:

either reserialize the entire list,or construct some mechanism of “framing” that allows you to store (and subsequently merge) multiple completely independent fragments (without mutating / extending – just add an extra frame)

请注意,某些格式支持追加;例如,协议缓冲区故意不包括文档关闭/长度前导码 – 它是附加片段=== merge的设计的特定功能,对于列表意味着:添加项目.然而,这不是json.

(编辑:李大同)

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

    推荐文章
      热点阅读