This commit is contained in:
aozhiwei 2020-06-17 13:21:19 +08:00
parent 6d4d04235b
commit a24a743b05

View File

@ -219,48 +219,52 @@ namespace f8
if (field_desc->is_repeated()) { if (field_desc->is_repeated()) {
a8::MutableXObject* array_obj = a8::MutableXObject::NewArray(); a8::MutableXObject* array_obj = a8::MutableXObject::NewArray();
std::shared_ptr<a8::XObject> repeated_field = jsonobj.At(field_name); std::shared_ptr<a8::XObject> repeated_field = jsonobj.At(field_name);
for (int i = 0; i < repeated_field->Size(); ++i) { for (int i = 0; i < reflection->FieldSize(*msg, field_desc); ++i) {
auto field_value = repeated_field->At(i);
switch (field_desc->cpp_type()) { switch (field_desc->cpp_type()) {
case google::protobuf::FieldDescriptor::CPPTYPE_BOOL:
{
array_obj->Push(reflection->GetRepeatedBool(*msg, field_desc, i));
}
break;
case google::protobuf::FieldDescriptor::CPPTYPE_STRING: case google::protobuf::FieldDescriptor::CPPTYPE_STRING:
{ {
array_obj->Push(reflection->GetString(*msg, field_desc)); array_obj->Push(reflection->GetRepeatedString(*msg, field_desc, i));
} }
break; break;
case google::protobuf::FieldDescriptor::CPPTYPE_INT32: case google::protobuf::FieldDescriptor::CPPTYPE_INT32:
{ {
array_obj->Push(reflection->GetInt32(*msg, field_desc)); array_obj->Push(reflection->GetRepeatedInt32(*msg, field_desc, i));
} }
break; break;
case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: case google::protobuf::FieldDescriptor::CPPTYPE_UINT32:
{ {
array_obj->Push(reflection->GetUInt32(*msg, field_desc)); array_obj->Push(reflection->GetRepeatedUInt32(*msg, field_desc, i));
} }
break; break;
case google::protobuf::FieldDescriptor::CPPTYPE_INT64: case google::protobuf::FieldDescriptor::CPPTYPE_INT64:
{ {
array_obj->Push(reflection->GetInt64(*msg, field_desc)); array_obj->Push(reflection->GetRepeatedInt64(*msg, field_desc, i));
} }
break; break;
case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: case google::protobuf::FieldDescriptor::CPPTYPE_UINT64:
{ {
array_obj->Push(reflection->GetUInt64(*msg, field_desc)); array_obj->Push(reflection->GetRepeatedUInt64(*msg, field_desc, i));
} }
break; break;
case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT:
{ {
array_obj->Push(reflection->GetFloat(*msg, field_desc)); array_obj->Push(reflection->GetRepeatedFloat(*msg, field_desc, i));
} }
break; break;
case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE:
{ {
array_obj->Push(reflection->GetDouble(*msg, field_desc)); array_obj->Push(reflection->GetRepeatedDouble(*msg, field_desc, i));
} }
break; break;
case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE:
{ {
a8::MutableXObject* p = a8::MutableXObject::NewObject(); a8::MutableXObject* p = a8::MutableXObject::NewObject();
MessageToJson(&reflection->GetMessage(*msg, field_desc), MessageToJson(&reflection->GetRepeatedMessage(*msg, field_desc, i),
*p *p
); );
array_obj->Push(*p); array_obj->Push(*p);
@ -278,6 +282,11 @@ namespace f8
delete array_obj; delete array_obj;
} else { } else {
switch (field_desc->cpp_type()) { switch (field_desc->cpp_type()) {
case google::protobuf::FieldDescriptor::CPPTYPE_BOOL:
{
jsonobj.SetVal(field_name, reflection->GetBool(*msg, field_desc));
}
break;
case google::protobuf::FieldDescriptor::CPPTYPE_STRING: case google::protobuf::FieldDescriptor::CPPTYPE_STRING:
{ {
jsonobj.SetVal(field_name, reflection->GetString(*msg, field_desc)); jsonobj.SetVal(field_name, reflection->GetString(*msg, field_desc));