Как мне получить значения тезисов из этого словаря

#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. Я рад, что это помогло