我在protoBuf中有一个叫做“package”的消息,我生成了我的.proto文件,用于填充该“package”中的所有必填字段,并且工作正常。 现在,我有一个名为“package”的protoBuf消息实例,我想将它序列化为一个流,然后将其输出到一个文件。
byte[] data;
using (var ms = new MemoryStream())
{
Serializer.Serialize<repo_package.Package.Builder>(ms, package);
data = ms.ToArray();
}
string packageFilePath = Path.Combine("C:\\1", package.Name);
File.WriteAllBytes(packageFilePath, data);
问题是我在调用“Serializer”函数时遇到错误,错误是
“只能处理数据合同类(以及此类列表/数组)”
为什么? 如何将我的包(protobuf消息)输出到文件?
谢谢,
猎户。
答案 0 :(得分:1)
这看起来像一个图书馆交叉;如果你的DTO是Package
,那么Package.Builder
的存在强烈暗示你正在使用Jon Skeet的protobuf-csharp-port
实现中的代码生成工具。这很好,但是通过protobuf-csharp-port
生成的代码期望与 {/ 1}}库一起使用,这可能意味着“在DTO实例上使用protobuf-csharp-port
方法”
WriteTo
是相同序列化协议的完全独立的实现;它有单独的代码生成工具(不可否认,它们可能有点令人困惑,它们都涉及名为protobuf-net
和protogen
的工具。如果您使用protoc
版protobuf-net
,则会输出与protogen
库一起使用的代码(为了完整性,protobuf-net
使用代码优先,不涉及protobuf-net
文件,但完全支持合同优先.proto
使用。)
因此;之一:
.proto
代码生成,并切换到protobuf-csharp-port
运行时,或者:protobuf-csharp-port
运行时,并切换到protobuf-net
代码生成