Разбор вложенных сообщений Protobuf не работает - PullRequest
2 голосов
/ 25 февраля 2011

Я пытаюсь проанализировать сообщение protobuf, но если у меня есть вложенные сообщения, синтаксический анализ не выполняется.

Программа, отправляющая сообщение, использует dotnet-protobufs. Когда я вызываю IsInitialized для сообщения, это нормально. Когда я просматриваю версию ToString () перед отправкой по сети, она выглядит правильно.

Когда я получаю его на стороне клиента (c ++), анализ не выполняется. Если я делаю ParsePartialFromString, а затем .DebugString (), вложенные сообщения не построены должным образом. Я получаю что-то вроде этого:

command: NEW  
nested_message {  
  0: 0x727568541b121d0a  
  14 {  
  }  
}

Я знаю, что это не принципиальная проблема, потому что, когда я делаю это с одного и того же клиента и сервера с не вложенным сообщением, все работает нормально. Это что-то особенное для вложения.

Я пытался погуглить, но безрезультатно. Любая помощь?

Редактировать : Это код, делающий создание объекта. Я вызываю ToString () для объекта и отправляю его по проводам.

private Request createRequestString()
{
    Request.Types.ClientDetails clientDetails = Request.Types.ClientDetails.CreateBuilder()
         .SetClientTimestamp(DateTime.Now.ToLongDateString())
        .Build();

    Request.Types.Details details = Request.Types.Details.CreateBuilder()
        .SetType(Request.Types.Details.Types.Types.NORMAL)
        .SetCurrency("CND")
        .SetDate(DateTime.Now.ToLongDateString())
        .Build();

    Request.Types.NewRequest newrequest = Request.Types.NewRequest.CreateBuilder()
        .SetClientDetails(clientDetails)
        .SetDetails(details)
        .Build();

    Request request = Request.CreateBuilder()
        .SetCommand(Request.Types.Commands.NEW)
        .SetNewRequest(newrequest)                
        .Build();

    bool isClientGood = clientDetails.IsInitialized;
    bool isDetailGood = details.IsInitialized;
    bool isNewRequestGood = newrequest.IsInitialized;
    bool isAllGood = request.IsInitialized;
    return request;         
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...