C# 由于API返回不同的属性,我应该使用动态对象吗?

C# 由于API返回不同的属性,我应该使用动态对象吗?,c#,C#,我试图找到从API中填充值的最佳方法,该API只在我对其进行第二次调用并填充变量后才存在。我不确定使用动态对象是否是最佳方案 我有下面这个循环。在我的第一个实例中,我将从我的邮箱中的邮递员那里获得一个“待定状态” GetServiceOrderStatusAsync,在我的第二个实例上,我将获得“成功状态” 很遗憾,我无法设置“trackingId=serviceResults.partnerReference.trackingId”,因为serviceResults.partnerRefere

我试图找到从API中填充值的最佳方法,该API只在我对其进行第二次调用并填充变量后才存在。我不确定使用动态对象是否是最佳方案

我有下面这个循环。在我的第一个实例中,我将从我的邮箱中的邮递员那里获得一个“待定状态” 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的第一个调用不存在,它只在我进行第二个调用时存在


很难说,因为我看不到此代码中实际返回的任何内容。根据您序列化响应的方式,可以将其配置为在第一个代码块中省略空值,其中它表示“这不起作用”,您能解释一下为什么它不起作用吗?考虑到你的解释,这似乎很有效。If
serviceResults.partnerReference.trackingID
仅在状态==Success时填充,并且您仅在If块内访问
的serviceResults.partnerReference.trackingID
(serviceResults.status==ServiceStatus.Success),那么问题出在哪里呢?很难说,因为我看不到这个代码中实际返回了什么。根据您序列化响应的方式,可以将其配置为在第一个代码块中省略空值,其中它表示“这不起作用”,您能解释一下为什么它不起作用吗?考虑到你的解释,这似乎很有效。如果仅当状态==成功时才填充
serviceResults.partnerReference.trackingID
,并且您仅在
(serviceResults.status==ServiceStatus.Success)
的If块内访问
serviceResults.partnerReference.trackingID
,那么问题出在哪里?