我正在尝试与使用http://code.google.com/p/metasyntactic/wiki/ProtocolBuffers的iphone使用protobuf-net的C#程序对话
不幸的是,我给出的.proto文件(从C#源代码生成)包含一个protoc拒绝的行:
repeated Pair_Guid_List`1 Local = 6;
看来这是因为源数据是C#字典,带有Guid键和类作为值 . 有没有办法更好地应对这个?
使用的protobuf-net版本是r278.zip .
(C#发送和接收这些protobufs一切正常,只是当我们将iphone添加到混合中时,这就成了一个问题 . )
UPDATE :感谢Marc,现在全部工作了!
C#端的对象原来是:
[ProtoMember(7)]
public Dictionary<Guid, List<Pages>> ReceivedPages { get; set; }
使用.proto中的以下工作正常:
message PagesDict {
required bcl.Guid guid = 1;
repeated Pages Pages = 2;
}
有问题的消息包含:
repeated PagesDict ReceivedPages = 7;
1 回答
首先 - 您是否尝试在iPhone上使用protobuf-net? v1预计不会通过monotouch工作; v2 does work(这是v2工作的一个重要驱动因素),但尚未发布(目前可用但不完整) . 如果您正在尝试这样做,请告诉我,因为它很重要;-p
我希望他们通过调用
Serializer.GetProto<T>
来获得那个.proto,遗憾的是这不是万无一失的,特别是涉及Dictionary<,>
这样的事情时(我会添加一个TODO试图在v2中修复它) .好消息是它将
Dictionary<TKey,TValue>
建模为repeated someType
,其中someType
应为:并且
Guid
被建模为bcl.Guid
(bcl.proto),它是:但请注意,如果使用.NET-to-.NET,则根本不需要"proto";只是兼容的类型 .