【发布时间】:2021-05-01 02:35:43
【问题描述】:
我正在尝试编写一个通用方法来遍历 protobuf 消息并基本上创建一个对象树。
目前为止
IMessage message = new Message() as IMessage;
foreach (FieldDescriptor field in message.Descriptor.Fields.InFieldNumberOrder())
{
if (field.FieldType == Google.Protobuf.Reflection.FieldType.Message)
{
if (field.IsRepeated)
{
// How to do this?
}
else
{
Children.Add(new MessageNode(field, (IMessage)field.Accessor.GetValue(message)));
}
}
else
{
Children.Add(new FieldNode(field, message));
}
}
除了重复字段外工作正常(地图字段可能会出现同样的问题)。
如果我对重复字段执行field.Accessor.GetValue(message),我会得到一个object[RepeatedField<T>],其中T 是一些嵌套消息。但是,我不能迭代 object 类型的东西。
我尝试将对象转换为 RepeatedField<IMessage> 但这只是返回 0。
有没有办法在不知道里面的类型的情况下迭代一个重复的字段?我只需要一个指向内部对象的IMessage 指针,从那里我可以使用IMessage 中的Descriptor。
【问题讨论】:
标签: c# iterator protocol-buffers