Должен ли я использовать динамический объект, поскольку мой API возвращает другое свойство?

#c#

#c#

Вопрос:

Я пытаюсь найти наилучший способ заполнить значение из API, которое существует только после того, как я делаю второй вызов и заполняю переменную. Я не был уверен, что использование динамического объекта — лучший сценарий.

У меня есть следующий цикл ниже. В моем первом экземпляре я получу «статус ожидания» от Postman из моего GetServiceOrderStatusAsync, а во втором экземпляре я получу «статус успеха».

К сожалению, я не могу установить «TrackingID = serviceResults.partnerReference.TrackingID», поскольку serviceResults.partnerReference.TrackingID создается только при втором вызове.

Это не работает:

     var finished = false;
    var trackingId = ""

    do {
       var serviceResults = await client.Services.GetServiceOrderStatusAsync..... 
        
       //This is correct ----1st call
       if (serviceResults.Status == ServiceStatus.Pending) {
           finished = false;
       }
       // This is not correct because this serviceResults.partnerReference.trackingID was never 
       //initialized on the first call.
       if (serviceResults.Status == ServiceStatus.Success) {
           trackingId = serviceResults.partnerReference.trackingID  -> this never exist
           finished = true;
       }
          }
   while (!finished);
 

Итак, я попробовал это, но я не уверен, что это лучшее использование динамического объекта:

         var finished = false;
        var trackingId = "";

        do {
           var serviceResults = await client.Services.GetServiceOrderStatusAsync("11158174", transactionId).ConfigureAwait(false);
            
           if (serviceResults.Status == ServiceStatus.Pending) {
               finished = false;
           }
           if (serviceResults.Status == ServiceStatus.Success) {

                dynamic serviceResulys = serviceResults;
                trackingId = serviceResulys.serviceResults.trackingID;  -->will that be the best way?
                finished = true;
           }
           if (serviceResults.Status == ServiceStatus.Error) {
               finished = true;
               transactionId  = "Error";
           }
       }
       while (!finished);
 

Вот мой вызов Postman: первый вызов API TrackingID не существует, он существует только тогда, когда я делаю второй вызов.

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Трудно сказать, поскольку я не вижу, чтобы что-то действительно возвращалось в этом коде. В зависимости от того, как вы сериализуете ответ, его можно настроить так, чтобы пропускать нули

2. Для первого блока кода, где написано «Это не работает», не могли бы вы объяснить, почему именно это не работает? Похоже, что это будет работать нормально, учитывая, как вы это объяснили. If serviceResults.partnerReference.trackingID заполняется только в том случае, если статус == Успех, и вы получаете доступ только serviceResults.partnerReference.trackingID к блоку if (serviceResults.Status == ServiceStatus.Success) , тогда в чем проблема?