繁体   English   中英

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

[英]How to append object to a file while serializing using c# protobuf-net?

我得到了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进行合并/合并)。

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

protobuf-net通过暴露SerializeWithLengthPrefix方法来完成此工作。 有很多方法可以反序列化,但是最简单的方法是DeserializeItems ,它依次为您提供对象的流序列(从迭代器的流中懒惰地假脱机-因此非常适合非常大的序列)。

有关信息,因此您可以看到它是如何实现的:如果使用PrefixStyle.Base128和正数fieldNumber ,则在电线上看起来就像具有包装对象一样:

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

主要区别在于不存在任何实际的DoesNotExist类型/实例,并且没有创建List<T> -您仅获得Person实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM