使用JSON.NET连续序列化列表

Vis*_*ons 6 c# serialization json.net

我正在尝试使用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);
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 5

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

因此,我的默认答案是:

重新整理整个列表,或构建一些"框架"机制,允许您存储(并随后合并)多个完全独立的片段(无需改变/扩展 - 只需添加一个额外的帧)

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