proto檔案里如果將欄位定義為repeated后

則使用protobuf-net編譯為c#檔案后,使用repeated修飾的欄位會變為一個List集合如下圖為編譯后的C#檔案

但是這個檔案里的List如上圖紅框所示只有get屬性并且為readonly,雖然在外面使用時可以通過list.AddRange的方式給集合賦值,但是在資料靈活存盤上還是有很多的限制,所以想怎么可以讓編譯后的c#檔案里的List自動加上Set屬性并且去掉readonly
經過查看protobuf-net的檔案后發現修改里面的csharp.xslt檔案就可以實作
具體方式如下:
打開protobuf-net>ProtoGen>csharp.xslt檔案,這個檔案屬于一個組態檔,它就是決定proto檔案生成一個怎樣的c#檔案,這里我們繼續我們的修改目標:加上Set和去掉readonly 所以打開它

打開后搜索Label_Repeated,里面應該只有這一個

找到之后就找到了對于Repeated修飾的proto檔案里編譯成C#檔案的配置如上圖大紅框內容就是啦
接下來是重點:
找到readonly所在的這一行,如下圖紅框

然后刪掉紅框內容 <xsl:if test="not($optionXml)">readonly</xsl:if>
刪掉后如下

然后進行第二步:
還是這里找到如下圖示記內容刪掉

刪掉這段注釋后保存檔案
然后我們重新將proto檔案編譯成c#檔案,結果如下:

我們發現實作了我們想要的效果,使用repeated修飾的proto檔案欄位使用protobuf-net編譯成c#檔案后readonly沒有了,并且可以set,到這里我們的目的就達成了,如有更多的研究歡迎留言討論
本帖容經過測驗,真實有效
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/382119.html
標籤:其他
上一篇:跟《原神》學學怎么讓用戶上癮
