草庐IT

Protobuf3

全部标签

c# - protobuf-net 序列化为字符串存入数据库然后反序列化

我想使用字符串序列化/反序列化一个对象。请注意,当我对文件进行序列化/反序列化时,一切正常。我想要做的是获取一个字符串,这样我就可以将它存储在数据库中,然后稍后将其拉出进行反序列化。这是有效的代码:MemoryStreammsTest=newMemoryStream();Serializer.Serialize(msTest,registrationBlocks);msTest.Position=0;ListCopiedBlocks=newList();CopiedBlocks=Serializer.Deserialize>(msTest);“CopiedBlocks”对象与“regi

c# - 使用 protobuf-net 反序列化未知类型

我有2个联网应用程序,它们应该相互发送序列化的protobuf-net消息。我可以序列化对象并发送它们,但是,我不知道如何反序列化接收到的字节。我尝试用它反序列化,但失败并出现NullReferenceException。//Where"ms"isamemorystreamcontainingtheserialized//bytearrayfromthenetwork.Messages.BaseMessagemessage=ProtoBuf.Serializer.Deserialize(ms);我在包含消息类型ID的序列化字节之前传递一个header,我可以在一个巨大的switch语句

c# - 如何使用 ProtoBuf-Net 序列化继承类

如果这是重复的,我很抱歉。我已经在几个地方搜索了我可能理解的答案,包括:ProtoBuf.netBaseclasspropertiesisnotincludedwhenserializingderivedclassSerializeinheritedclassesusingprotobuf-net很抱歉,我并没有真正理解答案。我正在寻找一种更快、更紧凑的二进制序列化程序,而ProtoBuf看起来可能就是答案。我需要序列化一组全部派生自单个基类的类。它们的数量很多,所以在提交编辑类代码之前,我运行了一个简单的测试。此外,我不想以任何可能影响反序列化使用NET二进制序列化程序生成的旧持久文

c# - 开始使用 protobuf-net

我正在尝试开始使用protobuf.net。我已经从here下载了最新版本,实现了一个[ProtoContract]类,现在我正尝试使用ProtoBuf.Serializer.Serialize对其进行序列化,如documentation中所述.问题是,没有这样的方法。如何将[ProtoContract]写入磁盘?更新显然,我得到了错误的版本或其他东西,但这是我的Serialize类的样子: 最佳答案 这一定能帮助您开始使用它:Source&Credit&MarcGravell开始的最简单方法就是编写数据:classPerson{p

c# - protobuf-net 如何实现可观的性能?

我想明白为什么theprotocolbufferssolutionfor.NET由MarcGravell开发和它一样快。我能理解最初的Google解决方案是如何实现其性能的:它预先生成用于对象序列化的优化代码;我已经手动编写了一些序列化代码,并且知道如果避免反射,可以用这种方式编写非常快速的代码。但是Marc的库是一个运行时解决方案,它使用属性并且不生成任何生成的代码。那么它是怎样工作的? 最佳答案 protobuf-net使用策略模式;根据需要(每个类型一次)它使用反射来查看类型,并构建一组可用于序列化和反序列化的序列化程序(基于

go - 如何将 Struct 转换/转换为 Protobuf?

我正在做一个个人项目并且是第一次使用Go。我使用结构对数据进行操作并将数据存储在文件中,我使用proto作为编码器。在项目中,我的原型(prototype)定义看起来像这样messageData{stringkey=1;stringvalue=2;}messageRecord{int64size=1;Datadata=2;}我的结构看起来像这样typeKVDatastruct{KeystringValuestring}目前,这就是我创建原型(prototype)数据的方式kvData:=KVData{Key:"name",Value:"A"}record:=&pb.Record{Siz

go - protobuf golang 从不同目录导入 .proto 和 .pb.proto

我有一个名为myProtos的库,它看起来像这样.|--proto|----hello.proto||--generated└----hello.pb.go我在外部有一个名为example.proto的.proto文件,应该导入hello.proto所以文件的顶部是这样的:syntax="proto3";packageexample;import"path/to/myProtos/proto/hello.proto"现在,当我编译example.proto时,我在example.pb.go上遇到导入错误,因为它有导入行import"path/to/myProtos/原型(prototy

protocol-buffers - Protobuf3 : How to describe map of repeated string?

Officialdocumentationaboutmaptype说:mapmap_field=N;...wherethekey_typecanbeanyintegralorstringtype(so,anyscalartypeexceptforfloatingpointtypesandbytes).Thevalue_typecanbeanytype.我想定义一个map字段,但在我的libprotoc3.0.0上似乎是非法的,提示Expected">".所以想知道有没有什么办法可以把重复的字符串放到map中。可能的解决方法是:messageListOfString{repeatedst

go - 在 protobuf 的 .proto 文件中将 golang 类型定义为其他类型的一部分

我想在.proto文件中定义一个Go类型。该类型是在.proto文件中定义的其他类型的slice。我有如下类型。typeSomeTypestruct{//fewfields}typeSomeTypes[]SomeType我在.proto文件中定义了SomeType,如下所示。messageSomeType{//}现在我想在.proto文件中定义SomeTypes类型。但我还没有找到任何方法来做到这一点。对我来说最简单的解决方案是更改类型SomeTypes如下:typeSomeTypesstruct{Content[]SomeType}然后我可以在.proto文件中将其定义为messag

go - 您应该使用 protobuf 作为用于处理还是仅用于传输的数据类型?

我有一个用Go编写的矩阵结构。该矩阵结构有很多方法。我希望能够高效地计算矩阵运算,但我也希望能够通过网络发送它以分发计算。我目前将矩阵及其方法与protobuf定义分开。当我需要通过网络发送它时,我必须从现有的Matrix{}结构创建一个新的pb.Matrix{},然后进行grpc调用。那似乎是一种浪费。那么,这是一种浪费吗?我是否应该将矩阵结构定义为protobuf定义,然后使用嵌入来定义其上的操作?还是让它们彼此分开更好? 最佳答案 在架构方面,我会将它们分开。这符合单一职责原则。在我的一个项目中,我们使用这种形式:typeFo