1
我有以下(簡化!).proto。它來自另一個軟件,我不能修改它。protobuf-net擴展:「已包含定義」
package test;
message Base
{
optional string name = 2;
extensions 1000 to max;
}
message Extension1 {
extend Base {
optional Extension1 type = 1000;
}
optional double blabla = 2;
}
message Extension2
{
extend Base {
optional Extension2 type = 1001;
}
optional double blabla = 2;
}
如果與硫辛酸編譯生成用於基站消息下面的C#(提取物):
private test.Extension1 _type = null;
[global::ProtoBuf.ProtoMember(1000, IsRequired = false, [email protected]"type", DataFormat = global::ProtoBuf.DataFormat.Default)]
[global::System.ComponentModel.DefaultValue(null)]
public test.Extension1 type
{
get { return _type; }
set { _type = value; }
}
private test.Extension2 _type = null;
[global::ProtoBuf.ProtoMember(1001, IsRequired = false, [email protected]"type", DataFormat = global::ProtoBuf.DataFormat.Default)]
[global::System.ComponentModel.DefaultValue(null)]
public test.Extension2 type
{
get { return _type; }
set { _type = value; }
}
正如你可以看到,延伸部都被稱爲「類型」,而應被稱爲「擴展1 :: type「和」Extension2 :: type「(如果我對extensions的理解是正確的)。
顯然,這不會編譯。此外,名稱= @「類型」似乎對我來說是錯誤的(不知道,也許沒關係)。
我能做些什麼來讀取使用這個.proto序列化的文件?我想過的
可能的解決方法:
- 修改.proto和重命名 「類型」 爲 「TYPE1」。這一定會打破一切。
- 使用protoc瀏覽二進制.pb。減少錯誤的數量,但許多仍然存在。
- 修補硫辛酸,使其產生像「Extension1_type」
- 手工修補包含「Extension1_type」字段名的.cs
- 比使用protobuf網
謝謝。我的確嘗試編輯.proto,但由於其他問題,我沒有回答自己的問題。感謝您確認這是一種有效的解決方法。 – Calvin1602 2014-10-06 09:28:43