工具这里我就不多介绍了,如果有用到ProtoGen工具的可以继续看一下我后面的方法。
如下图所示,我这里随便用了一个.proto文件,看下我这里面的repeated标记的字段,然后在对比我下面对应的C#文件发现是只读的不能赋值。
对应的C#文件如下图所示
对比了一下发现这个repeated标记的数组生成的C#文件对应的字段是只读的,没有Set属性,那么出现这种情况的原因只能是因为生成的文件强制生成的是只读属性而不是可读可写的属性。
顺着先找到我们刚才运行的.Bat命令文件,找到将.proto文件转成C#文件时使用的工具是什么。
从上面的这个文件中能看出来,我们实际上运行的是ProtoGen里面的一个可执行文件。
找到下面文件夹中的生成C#的配置文件如下图,双击打开
Ctrl + F搜索一下LABEL_REPEATED找到对应的位置
修改文件如下,删除画红框的这段 <xsl:if test=“not($optionXml)”>readonly</xsl:if>
修改文件如下,在删除掉画红框部分
都修改完结果如下所示
保存文件退出 然后重新生成文件尝试一下
这个其实就是文件中的配置默认生成的list是私有且只有get属性的,修改生成的配置文件即可解决这个问题。