簡體   English   中英

protobuf-net轉換成.proto會產生枚舉沖突?

[英]protobuf-net into .proto generates enum conflicts?

在C#中,我們從protobuf-net獲得.proto中的名稱空間,但沒有任何名稱空間。 因此,問題是如何使protobuf-net生成(並在內部使用)具有名稱pacs / packages的.proto文件。

例如,當我們解析所有項目以制作.proto文件以將C ++應用程序連接到C#應用程序時,

enum AnimationCode {
   None = 0;
   Idle = 1;
   //...
}

enum SessionCode {
   None = 0;
   //...
}

因此,當我們將該統一項目.proto文件提供給protogen編譯器時,我們得到了

枚舉類型“ SessionStateCode”沒有名為“ None”的值。

請注意,枚舉值使用C ++范圍規則,這意味着枚舉值是其類型的同級,而不是其子級。

而且沒有C ++代碼。

這樣做的目的是使編碼的C#消息至少可以從C ++讀取

盡管我很想知道您是否有任何建議,但是protobuf-net內部目前沒有任何代碼可以執行自動名稱沖突修復。 另一種選擇是:

    enum AnimationCode {
        [ProtoEnum(Name="AnimationCode_None")]
        None = 0,
        Idle = 1
    }

在這里,.proto在生成scema時將使用AnimationCode_None 實際上,它將是:

enum AnimationCode {
   AnimationCode_None = 0;
   Idle = 1;
}

我已經檢查了MetaType / ValueMember API,看起來目前很難在運行時設置.Name ,但是如果您願意,可以很容易地在新版本中MetaType修復 (例如使用類似的enum / MetaType fix )首選在運行時設置它們,而不用屬性裝飾。

你有嘗試過嗎?

package MyNamespace{
    enum AnimationCode {
       None = 0;
       Idle = 1;
       //...
    }
}

暫無
暫無

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

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