gpt4 book ai didi

c# - 如何在使用 c# protobuf-net 序列化时将对象附加到文件?

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:20 24 4
gpt4 key购买 nike

我得到了一个将对象序列化为文件的 Protobuf-net 的源代码。

var person = new Person {
Id = 12345, Name = "Fred",
Address = new Address {
Line1 = "Flat 1",
Line2 = "The Meadows"
}
};
using (var file = File.Create("person.bin")) {
ProtoBuf.Serializer.Serialize(file, person);
}

但是假设我有两个 Person 实例,我想将它们序列化到一个文件中。我该怎么做?

最佳答案

从纯粹意义上讲,protobuf 除了文件末尾之外没有任何“终止符”(这样就可以通过连接 blob 来简单地合并/组合对象)。

但是,我们可以注入(inject)我们自己的标记,例如通过在每个对象前加上后面数据的长度作为前缀。

protobuf-net 通过公开一个 SerializeWithLengthPrefix 来包装它方法。有多种反序列化方法,但最简单的是 DeserializeItems ,它依次为您提供对象的流序列(从迭代器中的流延迟假脱机 - 因此它非常适合非常大的序列)。

有关信息,您可以看到这是如何实现的:如果您使用 PrefixStyle.Base128和积极的fieldNumber ,然后在线这看起来就像你有一个包装器对象一样:

[ProtoContract]
public class DoesNotExist {
[ProtoMember({fieldNumber})]
public List<Person> People {get;set;}
}

主要区别在于没有实际的 DoesNotExist类型/实例存在,没有 List<T>已创建 - 您只需获得 Person实例。

关于c# - 如何在使用 c# protobuf-net 序列化时将对象附加到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15265698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com