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