簡體   English   中英

將protoBuf-net消息序列化為流C#-收到錯誤“只能處理數據合同類”

[英]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是完全相同的序列化協議的單獨實現; 它有獨立的代碼生成工具(當然也可能是稍顯混亂,無論涉及到的工具稱為protogenprotoc )。 如果使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM