从匿名类型的JSON结果中读取属性

时间:2011-10-06 21:09:31

标签: 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 个答案:

答案 0 :(得分:1)

是的,这是因为数据只是object。如果您在与控制器相同的程序集中执行此操作,则可以创建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类中将其正式化并使用它。