我有POCO類,我使用NewtonSoft json進行seralization。現在我想將它遷移到Google協議愛好者。有什麼辦法可以遷移我的所有類(不是手動),以便我可以使用谷歌協議buff進行序列化和非集中化。如何將C#中現有的POCO類轉換爲Google Protobuf標準POCO
2
A
回答
0
你只是想讓它工作嗎? 絕對最簡單的這樣做的方法是使用protobuf-net並添加[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)]
。這是告訴protobuf網組成的字段號碼,它通過採取所有的公衆成員,按字母順序排序,並向上計數。然後,您可以使用您的類型ProtoBuf.Serializer
,它應該以您期望的方式行事。
這是簡單,但它不是很健壯。如果您添加,刪除或重命名成員,它可能會全部不同步。這裏的問題是,協議緩衝區格式不包括名稱 - 只有字段號,並且要保證號碼隨着時間的推移要困難得多。如果您的類型可能發生變化,您可能需要明確定義字段編號。例如:
[ProtoContract]
public class Foo {
[ProtoMember(1)]
public int Id {get;set;}
[ProtoMember(2)]
public List<string> Names {get;} = new List<string>();
}
另一件需要注意的事情是非零默認值。默認情況下,protobuf-net會假設某些有關隱式缺省值的內容。如果您經常使用非零值默認值而不使用,那麼protobuf-net可能會誤解您。如果您願意,您可以在全球範圍內關閉此功能:
RuntimeTypeModel.Default.UseImplicitZeroDefaults = false;
相關問題
- 1. DTO POCO轉換
- 2. 如何將存儲過程複雜類型轉換爲poco?
- 3. 如何將數據錶轉換爲Asp.Net MVC中的POCO對象?
- 4. 如何在MVC操作中將發佈的XML轉換爲POCO?
- 5. 爲POCO實現IEquatable
- 6. 將Json轉換爲Poco Collection /如何爲每個人編碼?
- 7. 從POJO到POCO的轉換
- 8. 如何使用CIL將POCO轉換爲數組?
- 9. 如何將動態代理轉換爲POCO?
- 10. 使用現有的Poco作爲ServiceStack DTO
- 11. 將POCO對象轉換爲EntityFramework中的代理對象
- 12. 如何使用Poco C++ HTTPSessionFactory
- 13. 如何創建POCO類
- 14. 在Protobuf Poco類中更改的通知屬性
- 15. 將內存中的POCO對象轉換爲初始化的c#代碼
- 16. SQLCipher + POCO C++
- 17. POCO C++上CDT
- 18. POCO別名爲具有非標準命名約定
- 19. 如何匹配Poco :: RegularExpression C++中的「\ n」?
- 20. 將Poco Zip壓縮到Poco HTTPServerResponse
- 21. POCO:如何上傳圖像到webser使用poco在c + +
- 22. C++ Builder中的POCO庫
- 23. MVC3中的POCO類和ViewModels
- 24. 標記屬性作爲POCO中的鍵
- 25. C++ Poco Epoch(Unix)時間轉換爲LocalTime字符串
- 26. 如何使用POCO庫將C++對象轉移到Web服務
- 27. 未發現的POCO類要求
- 28. 將POCO實體轉換爲商業實體
- 29. 無法將poco對象從EF 4轉換爲JSON
- 30. EF4 C#Poco模板