#c# #asp.net #api
#c# #asp.net #API
Вопрос:
Я использую mastercard API. Ссылка https://developer.mastercard.com/documentation/mastercom/6#api_transactions_debit_master_card_and_europe_dual_acquirer
Я должен получить значение этих ключей. (Это ключ из списка словарей)
transactionSummaryList[0].authTransactionId
transactionSummaryList[0].clearingTransactionId
transactionSummaryList[0].singleMessageSummaryDetails.authTransaction.acquirerReferenceNumber
transactionSummaryList[0].singleMessageSummaryDetails.authTransaction.adviceReasonCode
...
Мой код до сих пор
try
{
TransactionsDebitMasterCardAndEuropeDualAcquirer response = TransactionsDebitMasterCardAndEuropeDualAcquirer.searchForDebitMCMessageTransaction(transactionsValues);
OutputTransaction outputTransaction = new OutputTransaction();
foreach (Dictionary<String, Object> item in (List<Dictionary<String, Object>>)response["transactionSummaryList"])
{
TransactionSummary transactionSummary = new TransactionSummary();
transactionSummary.authTransactionId = Out(item, "authTransactionId").ToString();
transactionSummary.clearingTransactionId = Out(item, "clearingTransactionId").ToString();
Object aux = Out(item, "singleMessageSummaryDetails");
outputTransaction.transactionSummaryLists.Add(transactionSummary);
}
outputTransactions.Add(outputTransaction);
}
public static Object Out(Dictionary<String, Object> response, String key)
{
return response[key];
}
Я сталкиваюсь с проблемой, когда пытаюсь получить значения из ключа singleMessageSummaryDetails.
Все значения, которые я хочу, находятся внутри Object aux, но я не могу их «достать».
Комментарии:
1. Вы пытаетесь получить значение из этого словаря по ключу? (знаете ли вы точный ключ, который вы пытаетесь получить)
2. Да. Из этого ключа я получил transactionSummaryList[0].authTransactionId и transactionSummaryList[0].Очистка TransactionID. Но другой я не могу до них добраться. Все значения находятся внутри этого объекта aux, idk, как их получить.
3. Итак, aux — это объект, содержащий несколько словарей?
4. Привет, Нолан Брэдшоу, большое спасибо за попытку помочь мне, я уже нашел свое решение, проверьте его ниже. Продолжайте помогать этому сообществу, вы потрясающие ребята. Пока. Хорошего дня
Ответ №1:
У вас есть case aux в качестве объекта, поэтому он не знает о каких-либо конкретных свойствах. Object — это базовый класс, от которого наследуют все остальные классы .NET.
Если вы хотите получить доступ к определенному свойству, вам нужно будет привести ваш объект к определенному типу.
Если вы знаете тип класса, вы можете использовать его напрямую, используя либо;
public static YourClass Out(Dictionary<String, YourClass > response, String key)
или MyClass myClassInstance = (YourClass)myObject;
Если вы не знаете тип, вы можете использовать отражение. Это немного сложнее, но будет что-то вроде;
Type myType = myObject.GetType();
IList<PropertyInfo> props = new List<PropertyInfo>(myType.GetProperties());
foreach (PropertyInfo prop in props)
{
object propValue = prop.GetValue(myObject, null);
// Do something with propValue
}
Ответ №2:
Наконец-то я понял!
Чтобы это сработало, сначала я перевожу ответ mastercard в JSON.
Их я просто и легко помещаю в свой объект (DeserializeObject).
try
{
TransactionsDebitMasterCardAndEuropeDualAcquirer response = TransactionsDebitMasterCardAndEuropeDualAcquirer.searchForDebitMCMessageTransaction(transactionsValues);
OutputTransaction outputTransaction = new OutputTransaction();
var aux = JsonConvert.SerializeObject(response);
outputTransaction = JsonConvert.DeserializeObject<OutputTransaction>(aux);
outputTransactions.Add(outputTransaction);
}
Большое спасибо за ваш ответ @Mark Cooper, мне очень помогает.
Извините за мой плохой английский.
Еще раз спасибо.
Комментарии:
1. Я рад, что это помогло