我有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. 如何將數據錶轉換爲Asp.Net MVC中的POCO對象?
- 3. 爲POCO實現IEquatable
- 4. 將Json轉換爲Poco Collection /如何爲每個人編碼?
- 5. 如何使用CIL將POCO轉換爲數組?
- 6. 如何將動態代理轉換爲POCO?
- 7. 使用現有的Poco作爲ServiceStack DTO
- 8. 將POCO對象轉換爲EntityFramework中的代理對象
- 9. 如何使用Poco C++ HTTPSessionFactory
- 10. 將內存中的POCO對象轉換爲初始化的c#代碼
- 11. POCO C++上CDT
- 12. POCO別名爲具有非標準命名約定
- 13. 如何匹配Poco :: RegularExpression C++中的「\ n」?
- 14. 將Poco Zip壓縮到Poco HTTPServerResponse
- 15. 標記屬性作爲POCO中的鍵
- 16. 如何使用POCO庫將C++對象轉移到Web服務
- 17. 將POCO實體轉換爲商業實體
- 18. 無法將poco對象從EF 4轉換爲JSON
- 19. 如何將jQuery轉換爲標準javascript?
- 20. EF4 C#Poco模板
- 21. 如何將GeoJSON轉換爲vector.pbf(Protobuf)?
- 22. Poco C++事件是如何處理的?
- 23. 如何在實體框架的POCO類
- 24. 將HQL轉換爲標準
- 25. C++類成員初始化(POCO)
- 26. 使用SerializeToString()和ParseFromString()函數將Python ProtoBuf轉換爲C++ ProtoBuf
- 27. POCO C++ - NET SSL - 如何POST HTTPS請求
- 28. 如何比較POCO類和數據庫?
- 29. POCO Id屬性沒有被發現
- 30. 是否有將類轉換爲字符串的標準方式