无法让 Protobuf-net 与 vb.net 一起使用
Posted
技术标签:
【中文标题】无法让 Protobuf-net 与 vb.net 一起使用【英文标题】:Can't get Protobuf-net working with vb.net 【发布时间】:2014-10-24 16:48:03 【问题描述】:我最近用我的 vb.net 代码尝试了 Protobuf-net r668。我可以在我的数据类上标记属性,但无法让序列化和反序列化功能工作。 我按照http://code.google.com/p/protobuf-net/wiki/GettingStarted 的说明进行操作,但在将代码转换为 vb.net 后,我发现这个 C# 代码:
using (var file = File.Create("person.bin"))
Serializer.Serialize(file, person);
翻译成 vb.net 时不起作用,因为 Serialize 方法没有显示为 Protobuf.Serializer 类的方法。
任何在 vb.net 中使用 Protobuf-net 的人的任何指点都会有所帮助。
【问题讨论】:
您的目标是什么平台?如果这是常规的 .NET,这应该可以正常工作 - 它是常规的静态方法,没有什么特别或不寻常的。您的目标是 windows phone 还是类似的? 我正在使用 Visual Studio 2010 在 Windows 7、64 位上进行开发。我使用的是 .net Framework 4。 但是您定位的平台是什么?常规的.NET?还是其中一种移动平台? 抱歉,如果您指的是高级编译选项,目标平台是 .net framework 4。 啊,我想知道;您自己的代码中是否有类型、字段、变量、属性等,称为Serializer
?我想知道编译器是否只是在选择您的本地声明...
【参考方案1】:
它应该可以工作;以下运行正常,例如:
Imports System.IO
Module Module1
Sub Main()
Dim strFileName As String = "foo.bin"
Dim f As FileStream = File.Create(strFileName)
Dim objData As Foo = New Foo With .Name = "abcdef"
ProtoBuf.Serializer.Serialize(f, objData)
End Sub
<ProtoBuf.ProtoContract>
Class Foo
<ProtoBuf.ProtoMember(1)>
Property Name As String
End Class
End Module
我最初的想法是,您引用了一个 protobuf-net.dll 版本,该版本适用于其中一个移动平台,它的某些功能略有不同。具体来说,来自“仅核心”构建的 dll。 What Files Do I Need.txt
文件(包含在包的根目录中)中描述了每个不同构建的预期目的
【讨论】:
谢谢马克!你是对的,我只是错误地抓住了核心。我交换了 DLL,现在 vb.net 代码运行良好。 还想补充一点,它比 .net 序列化快得多...非常感谢。 @stackmike_2014 换个角度来看,我正在做一些理论上应该比 protobuf-net 快得多的东西;p 我等不及了。一周前我发现了 protobuf-net,当时我对 .net 需要 10-12 秒来反序列化我的一些数据结构的 65 MB 保存状态文件感到不满意。对于我今天完成的一些测试用例,我怀疑 protobuf 会将其减少到不到一半的时间......一旦我在任何地方添加了属性。继续编码 Marc,谢谢。以上是关于无法让 Protobuf-net 与 vb.net 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
Protobuf-net - 流不支持并发 IO 读取或写入操作
VB.NET cmd.CommandText 无法与 sql 更新一起正常工作