草庐IT

Protobuf

全部标签

c# - 是否可以将 Protobuf-Net 与没有无参数构造函数的类一起使用?

使用Protobuf-Net,我发现在没有无参数构造函数的情况下似乎无法反序列化一个类,或者我可能遗漏了什么?我不想要某些具有无参数构造函数的类。我可以使用某种属性或其他技术吗? 最佳答案 protobuf-net目前依赖于无参数构造函数来工作。然而,该构造函数不需要是公共(public)的(itwillusereflectionifneedbetoinvokeit),因此您可以定义仅供protobuf-net使用的所需私有(private)构造函数(添加关于原因的注释)并在那里处理特定的序列化相关问题。这可以防止您的api的其余部

c# - protobuf.net 意外的子类型

我在使用Protobuf.net的项目中遇到此异常:InvalidOperationException"Unexpectedsub-type:foo"我要发送一个类,如下所示:classmessage{listlistOfBars;}foo继承offbar,但是protobuf似乎对此感到窒息并生成上面的异常。有什么办法解决这个问题吗?我需要能够在列表中包含bar的所有不同子类型,因此更受类型约束的解决方案将很困难/不可能。 最佳答案 我可能弄错了,但我认为你需要在继承类上指定哪些子类型从它继承,例如:[Serializable,P

c# - ProtoBuf-Net 和 Compact Framework 出现 "Invalid field in source data: 0"错误

有人知道使用ProtoBuf-Net在紧凑框架和完整.Net框架之间进行序列化/反序列化时有任何问题吗?我有一个名为LogData的类,我正在compactframework3.5下序列化,传输到服务器(运行.Netframework4.0),然后反序列化。有时它有效,有时它会抛出上述错误,我还没有将其缩小到任何特定原因。我用不同的值做了很多测试,但似乎无法找到错误发生时的任何韵律或原因。我在下面包括我的类(class)(减去各种构造函数)。我已多次查看两侧的字节缓冲区,但尚未发现通过线路从一侧发送到另一侧的数据存在差异。[ProtoContract]publicclassLogDat

c# - 在 Protobuf.NET 中序列化 List<object> (其中对象支持原语)?

如何使用protobuf-net序列化这样的对象:publicclassMyObject{publicstringKey{get;set;}publicListValues{get;set;}}当我尝试使用TypeModelprotobuf-net对此进行序列化时,抛出一个错误,指出它不知道如何序列化System.Object。现在我知道Values只会包含基元(int、string、float、DateTime等)。那么如何让protobuf-net知道这一点呢? 最佳答案 在任何意义上,这在纯ProtoBuf中都是不可行的。Pr

c# - 什么是 protobuf-net SerializeWithLengthPrefix 标记参数?

此方法接受一个整数作为最后一个参数,但我不确定我是否理解我将使用它的确切目的。Serializer.SerializeWithLengthPrefix(stream,object,PrefixStyle.Base128,[tag]);对应的Deserialize方法也是如此。它只是一种标记消息以在反序列化上添加某种“查询”功能以过滤掉不需要的消息的方法,还是有任何其他用途? 最佳答案 基本上,它是一个额外的标记,可以(尽管不是必须)用于记录添加的消息的“类型”,因为假设(当使用*WithLengthPrefix方法时))是同一个流中

c# - 如何使用具有不可变值类型的 protobuf-net?

假设我有一个像这样的不可变值类型:[Serializable][DataContract]publicstructMyValueType:ISerializable{privatereadonlyint_x;privatereadonlyint_z;publicMyValueType(intx,intz):this(){_x=x;_z=z;}//thisconstructorisusedfordeserializationpublicMyValueType(SerializationInfoinfo,StreamingContexttext):this(){_x=info.GetInt

c# - 适用于 C# 的 Google Protobuf 3.0.0 程序集

在我们的项目中,我们成功地将GoogleProtobuf用于C++。现在需要编译相同的*.proto文件以在C#代码中使用它。我下载了最近的Protobufversion3.0.0-alpha-3.它为C#提供了proto2格式的支持,这对我来说已经足够了。我可以成功构建我的*.proto文件并获得*.cs文件。但是,当我将生成的*.cs文件添加到我的C#项目并尝试构建时,我收到如下编译器错误:“在全局命名空间中找不到类型或命名空间名称‘Google’(你是缺少程序集引用?)”这是发生错误的地方://Generatedbytheprotocolbuffercompiler.DONOTE

c# - protobuf-net继承

Marc在stackoverflow上提到,在protobuf-netv2中可以使用ProtoInclude属性(或类似方法)序列化/反序列化类层次结构,而无需指定基类中的每个子类型。这已经实现了吗?我们有一个可以在外部库中派生的插件接口(interface),因此无法知道派生类型是什么。虽然我们可以在类型之间保持唯一编号,但我在网上找不到任何示例,除了使用需要指定子类型的ProtoInclude属性。如果我不知道子类型是什么,我将如何使用protobuf-net实现继承? 最佳答案 如果您不能在属性中指定子类型(因为它在编译时未知

c# - protobuf-net 是否支持可空类型?

是否可以在protobuf-net中生成可空成员?messageProtoBuf1{optionalInt32?databit=1;optionalNullabledatabool=2;} 最佳答案 是的,但如果您从.proto执行代码生成,默认情况下它不会生成它们。如果这只是C#,当然,您不需要.proto-只需:[ProtoContract]publicclassProgoBuf1{[ProtoMember(1)]publicint?Foo{get;set;}[ProtoMember(2)]publicfloat?Bar{get

c# - 在不标记成员的情况下使用 ProtoBuf.NET 进行序列化

我在某处读到ProtoBuf.NET作者的评论:Thereareoptionstoautomaticallyinferthenumbers,butthatisbrittleandnotrecommended.Onlyusethisifyouknowyouneverneedtoaddmoremembers(itordersthemalphabetically,soaddinganewAardvarkCountwillbreakeverything).这正是我感兴趣的那种情况:)我有一些类似于map-reduce场景的东西,我想使用ProtocolBuffer(例如map-reduce的“