簡體   English   中英

在protobuf-net中繼承的序列化

[英]Serialisation with inheritance in protobuf-net

鑒於.proto看起來像這樣:

message Base {
    string Dummy = 1
}

message Derived {
    Base Super = 1
    string Parp = 2 
}

......還有一些C#之類的東西:

public class Base {
    public string Dummy;
}

public class Derived : Base {
    public string Parp
}

如何才能在protobuf-net中自定義序列化才能做到這一點? 最初我開始考慮使用TypeModel並為Base MetaType調用AddSubType,但是它似乎為Base創建了所有派生類的可選字段的類型定義(即與我需要的相反的方式)

我以為自己可以自己走層次結構,但是看看TypeModel,它似乎支持將類型提供給Deserialise,但它在序列化期間使用value.GetType()。 即便如此,我還不清楚如何做到這一點。 我唯一的選擇是使用ProtoWriter手動編寫每個字段嗎? 這是我目前正在嘗試的,但我希望有一個更簡單的方法。

首先要注意的是protobuf本身不支持繼承。 這沒有“官方”布局。 Protobuf-net不會以您希望的方式支持序列化:選擇子類型封裝(而不是基本類型封裝)來解決幾個問題,包括:

  • 滿足Liskov替代原則
  • 當調用者不知道/期望序列化類型時正常工作
  • 基本上,工作(除了最簡單的例子之外的任何事情,兩端都准確地知道他們得到的子類型,這在很大程度上打敗了多態性的點)

但是,您可以手動映射DTO,基本上您的DTO層根本不使用繼承。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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