我已经使用protobuf-net将集合序列化为文件。
我正在寻找一种将更多项目合并到现有文件的方法。
目前我有这个:
[Test]
public void CanAppend()
{
var list = new List<Person>();
for (int i = 0; i < 1000; i++)
list.Add(new Person {Name = i.ToString(), Age = i});
using (var file = File.Create("person.bin"))
{
Serializer.Serialize<List<Person>>(file, list);
}
list.Clear();
for (int i = 1000; i < 2000; i++)
list.Add(new Person { Name = i.ToString(), Age = i });
using (var file = File.OpenRead("person.bin"))
{
Serializer.Merge<List<Person>>(file, list);
}
using (var file = File.OpenRead("person.bin"))
{
list = Serializer.Deserialize<List<Person>>(file);
}
//Fails here
Assert.That(list.Count, Is.EqualTo(2000));
}
[ProtoContract]
class Person
{
[ProtoMember(1)]
public string Name { get; set; }
[ProtoMember(2)]
public int Age { get; set; }
}
但这是行不通的。有任何想法吗?
最佳答案
Merge
是反序列化操作(用于将流作为增量读取到现有对象中)。幸运的是,protobuf序列只是简单的加法运算,因此您需要做的只是打开要追加的流(或手动移动到流的末尾),然后调用Serialize
。
using (var file = File.Open("person.bin", FileMode.Append, FileAccess.Write)) {
Serializer.Serialize(file, list);
}
关于protobuf-net - protobuf-net将集合合并到现有文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3453552/