[英]Serialize a protoBuf-net message to a stream c# - getting error “Only data-contract classes can be processed”
我在protoBuf中有一條消息稱為“包”,我將我的.proto文件生成到類中,目的是填充該“包”中的所有必填字段,並且工作正常。 現在,我有一個名為“ 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”函數時遇到錯誤,錯誤是
“只能處理數據合同類(及其此類列表/數組)”
這是為什么? 如何將Package(protobuf消息)輸出到文件?
謝謝,
獵戶座。
這看起來像是圖書館的交叉。 如果您的DTO是Package
,則Package.Builder
的存在強烈建議您使用Jon Skeet的protobuf-csharp-port
實現中的代碼生成工具。 很好,但是通過protobuf-csharp-port
生成的代碼希望與 protobuf-csharp-port
庫一起使用,這可能意味着“在DTO實例上使用WriteTo
方法”。
protobuf-net
是完全相同的序列化協議的單獨實現; 它有獨立的代碼生成工具(當然也可能是稍顯混亂,無論涉及到的工具稱為protogen
和protoc
)。 如果使用protobuf-net
的版本protogen
,它將輸出代碼,與工作protobuf-net
庫(的完整性,具有protobuf-net
,也通常使用代碼優先,而沒有涉及.proto
文件,但完全支持合同優先.proto
用法)。
所以; 之一:
protobuf-csharp-port
代碼生成,並切換到protobuf-csharp-port
運行時,或者: protobuf-net
運行時,並切換到protobuf-net
代碼生成
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.