使用 List 作为 protobuf 中重复字段的对应项是否正确?我正在尝试这个并且总是遇到异常:
线型无效;这通常意味着您在没有截断或设置长度的情况下覆盖了文件;看到使用 Protobuf-net,我突然得到一个关于未知线型的异常
整个缓冲区是(第一个消息,下一个到达的附加到这个):9 8 5 26 5 24 238 98 32 1
java protobuf 文件:
package XXX;
option java_package = "XXX";
option java_outer_classname = "Protos";
option optimize_for = SPEED;
message V3DDelta {
optional int32 bid = 1;
optional int32 bidSize = 2;
optional int32 ask = 3;
optional int32 askSize = 4;
}
message Request {
optional int32 type = 1;
optional string request = 2;
}
message Response {
optional int32 type = 1;
optional string response = 2;
repeated V3DDelta v3dDelta = 3;
}
和 protbuf-net 类:
[ProtoContract]
public class V3DDelta {
[ProtoMember(1)]
public double bid { get; set; }
[ProtoMember(2)]
public int bidSize { get; set; }
[ProtoMember(3)]
public double ask { get; set; }
[ProtoMember(4)]
public int askSize { get; set; }
}
[ProtoContract]
public class Request {
[ProtoMember(1)]
public int Type { get; set; }
[ProtoMember(2)]
public string Rq { get; set; }
}
[ProtoContract]
public class Response {
[ProtoMember(1)]
public int Type { get; set; }
[ProtoMember(2)]
public string Rsp { get; set; }
[ProtoMember(3)]
public List<V3DDelta> v3dDelta { get; set; }
public Response() {
v3dDelta = new List<V3DDelta>();
}
}
我试过 V3DDelta[] 但结果是一样的。阅读留言:
Response rsp = Serializer.DeserializeWithLengthPrefix<Response>(rcvstream, PrefixStyle.Base128);
并在 java 中使用 writeDelimitedTo 发送消息。c# 中的缓冲区与 java 中的缓冲区完全相同。当有 na v3dDelta 字段时,一切都按预期工作。