Принятие параметров JSON в моем веб-API ASP.NET MVC 5 - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть API, созданный с моделью представления. Запрос будет в следующем формате:

Content-Type: application/json
{
  "type": "TransactionChangedEvent",
  "operationType": "REFUND",
  "operationState": "COMPLETED",
  "created": "2017-05-19T08:27:49.402Z",
  "transaction": {
    "type": "REFUND",
    "id": "345e3802528841bea67dc76744b76ab8",
    "amount": 59.02,
    "currency": "USD",
    "created": "2017-05-19T08:27:49.199Z",
    "updated": "2017-05-19T08:27:49.402Z",
    "state": "COMPLETED",
    "description": "Refund request",
    "maskedPan": "400000...0002",
    "paymentTransactionId": "70eb665c254140558921dfd479a5f390",
    "merchantCustomerId": "cus-123456",
    "customerEmail": "andy@example.com",
    "customerAccountId": "paypal_user_123"
  }
}

Мне интересно взять данные из "transaction": {

Класс модели моего вида:

public virtual string id { get; set; }
public virtual string checkoutUrl { get; set; }
public virtual string state { get;set; }
public virtual decimal? amount { get; set; }
public virtual string currency { get; set; }
public virtual string requestId { get; set; }
public virtual string description { get; set; }
public virtual string paymentInstrument { get; set; }

и мой контроллер:

[HttpPost]
public IHttpActionResult ProcessDeposit(ViewModel emp)
{
    emp.type = some loginc;
}

1 Ответ

0 голосов
/ 04 сентября 2018

Непонятно на 100%, каков ваш вопрос, но ваша проблема в том, что ваша модель представления не соответствует формату вашего json. Если они совпадают, то MVC магически десериализует все для вас, и это будет просто работать. Основываясь на вашем примере JSON, у вас есть дочерний объект под названием транзакция, а остальные - просто простые свойства, поэтому ваша модель должна выглядеть так:

public class TransactionViewModel
{
    public string type { get; set; }
    public string operationType { get; set; }
    public string operationState { get; set; }
    public DateTime created { get; set; }
    public Transaction transaction { get; set; } // child object
}

и вам нужно определить класс транзакции для обработки дочернего объекта:

public class Transaction
{
    public string type { get; set; }
    public string id { get; set; }
    public decimal amount { get; set; }
    // ... add remaining properties of Transaction here
}

Тогда сделайте ваш ViewModel a TransactionViewModel, и он должен работать. Если вам нужно изменить его на другой формат для визуализации представления или чего-то еще, вы можете выполнить это преобразование внутри действия контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...