序列化和反序列化未知的繼承類型 (Serializing and deserializing unknown inherited types)


問題描述

序列化和反序列化未知的繼承類型 (Serializing and deserializing unknown inherited types)

I started looking at using proto-buf .Net for my serialization needs for media browser. 

In the new system we have a entity framework that can be extended with plug-ins. 

So, for example, we define a Media class in the core library, and then plug-ins can define subclasses such as Song. 

It seems that proto-buf .Net needs to know about all sub types of our core defined base class. 

So I am expected to decorate my base class with 

[ProtoInclude(2, typeof(Song))]

But ... at that point in time I know nothing about the Song class that does not exist yet. 

Is it back to the drawing board? Am I trying to do something the library is not designed for?


參考解法

方法 1:

(from the author)

In the current release, it is fixed to types known to the parent. However, this is a known limitation, so there is a plan to abstract the meta-model so that it can be provided separately at runtime - broadly comparable to how you provide such information to XmlSerializer (it will still need a way to provide tags (the "2" above) per type).

I have started on this work, but I expect it to take a few weeks to get it fully working (the refactor will also tie into some other changes to help compact framework).

So up to you... if you can wait a few weeks, I hope to have something working.

Note that you would still need some way of generating (unique, repeatable) tags for all the different sub-types - configuration, etc.

(by Sam SaffronMarc Gravell)

參考文件

  1. Serializing and deserializing unknown inherited types (CC BY-SA 3.0/4.0)

#protocol-buffers #protobuf-net #C#






相關問題

通過 Method.invoke() 調用靜態方法給了我 NPE (Static method invocation via Method.invoke() gave me NPE)

python中的protobuf到json (Protobuf to json in python)

如何序列化/反序列化使用 ScalaPB 的“oneof”的 protobuf 消息? (How to serialize/deserialize a protobuf message that uses 'oneof' with ScalaPB?)

序列化和反序列化未知的繼承類型 (Serializing and deserializing unknown inherited types)

Thrift 與協議緩衝區 (Thrift vs Protocol buffers)

如何在客戶端排除導入 (How to exclude an import on client side)

為什麼當我安裝了 Tensorflow 的所有庫後,會出現無目錄錯誤? (Why do I get a no directory error, when I have installed all the libraries for Tensorflow?)

如何為 C# <proto/> 定義傳遞experimental_allow_proto3_optional 以在proto3 中啟用可選? (How to pass experimental_allow_proto3_optional for C# <proto/> definitions to enable optional in proto3?)

CentOS7 的 libprotobuf-lite.so 文件在 CentOS8 機器上工作嗎? (is libprotobuf-lite.so file from CentOS7 working in CentOS8 machine?)

protogen - 支持 <Property> 指定的語法 (protogen - support the <Property>Specified syntax)

.Net 字典類型在 protobuff (.Net dictionary type in protobuff)

為什麼 protobuf 更喜歡代碼生成器而不是運行時動態加載 (why protobuf prefer code-generator other than dynamic loading at runtime)







留言討論