无法让 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 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

在 vb.net 中使用 .proto 文件

Protobuf-net - 流不支持并发 IO 读取或写入操作

VB.net - 活动目录连接字符串

VB.NET cmd.CommandText 无法与 sql 更新一起正常工作

如何让我的 VB.net 程序在 Windows XP 上运行?

无法将 IE9 渲染引擎与 vb.net 浏览器控件集成