Чтение свойства из результата JSON с анонимным типом

#asp.net-mvc #json

#asp.net-mvc #json

Вопрос:

Привет, в действии я создаю данные Json следующим образом:

 public JsonResult InvoiceLineGridData(string sidx, string sord, int page, int rows, int id)
         {
            ....

                var jsonData = new {
                total = totalPages,
                page,
                records = totalRecords,
                rows = invoiceLines.Select(............)
            };
            return Json(jsonData, JsonRequestBehavior.AllowGet);
        }
  

В методе, который вызывает это, я хочу получить количество записей из этих данных.

Может ли это быть проблемой, потому что это анонимный тип?

Я иду :

 var result = controller.InvoiceLineGridData(null, "desc", 1, 10, 7);

result.Data
  

но, похоже, я не могу получить общее количество записей. Кто-нибудь знает, как это сделать?

Комментарии:

1. откуда берется TotalPages?

2. Оно вычисляется в методе

Ответ №1:

Да, это потому, что данные — это просто object . Если вы делаете это в той же сборке, что и ваш контроллер, вы можете создать a dynamic и получить из него данные. Но лучше всего, если вы действительно надеетесь использовать данные таким образом, создать реальный (неанонимный) тип, к которому вы можете применить Data свой метод тестирования.

 var jsonData = new InvoiceLineData {
            Total = totalPages,
            Page,
            Records = totalRecords,
            Rows = invoiceLines.Select(............)
        };


var resultData = (InvoiceLineData)result.Data;
// or
dynamic resultData = result.Data;

Assert.AreEqual(10, resultData.Records);
  

Когда я смотрю на это подробнее, похоже, что ваши данные, вероятно, следуют определенному шаблону, ожидаемому каким-то общим управлением сеткой. Вам было бы неплохо формализовать это в GridData классе и использовать это.