没有知道类型的Json List计数

时间:2017-10-24 19:34:23

标签: c# json entity-framework json.net system.reflection

使用GET API方法,我需要获取具有Entity Framework的表的所有记录的计数。该方法接收一个表名,然后我得到程序集并获取所有记录。但结果是一个JSON,我还没有找到如何计算这个。

这是我的代码:

try
{
    Type t = Type.GetType("Iwg.Transverse.Business." + tableName + "Manager, Iwg.Transverse.Business, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
    MethodInfo method = t.GetMethod("GetAll", Type.EmptyTypes);
    var executionMethod = method.Invoke(Activator.CreateInstance(t), null);
    JsonResult<object> json = this.Json(executionMethod);

    //This line does not work.
    //return this.Json(json .Count + 1);
}
catch (Exception e)
{
    return this.Json("Error getting the table " + tableName + "\nError " + e.Message);
}

2 个答案:

答案 0 :(得分:1)

从您的问题来看,library(dplyr) library(ggplot2) library(shiny) raw <- diamonds cutlist <- sort(unique(as.vector(raw$cut)), decreasing = FALSE) %>% append("All", after = 0) colorlist <- sort(unique(as.vector(raw$color)), decreasing = FALSE) %>% append("All", 0) server <- function(input, output) { output$table <- renderDataTable({ if(input$colorchoose == "All") { filt1 <- quote(color != "@?><") } else { filt1 <- quote(color == input$colorchoose) } if (input$cutchoose == "All") { filt2 <- quote(cut != "@?><") } else { filt2 <- quote(cut == input$cutchoose) } filter_(raw, filt1) %>% filter_(filt2) } ) } ui <- shinyUI(fluidPage( titlePanel("Dynamic Filter Test App"), sidebarLayout( sidebarPanel( selectizeInput("cutchoose", "Cut:", cutlist), selectizeInput("colorchoose", "color:", colorlist) ), mainPanel( dataTableOutput("table") ) ) ) ) shinyApp(ui = ui, server = server) 是否返回JSON数组,或者它是否返回某种GetAll(或其他东西)然后转换为JSON,这一点并不完全清楚。 (问题的内容似乎暗示前者,但代码似乎是后者。)

如果IEnumerable总是返回表示项目数组的JSON字符串,那么您可以执行以下操作来获取计数:

GetAll

如果int count = Newtonsoft.Json.Linq.JArray.Parse((string)executionMethod).Count; 方法总是返回某种GetAll而不是JSON,那么您可以执行以下操作来获取计数:

IEnumerable

(请注意,您需要在代码顶部使用int count = ((IEnumerable)executionMethod).Cast<object>().Count(); 才能实现此目的。)

如果using System.Linq;返回其他内容,例如JSON 对象(不是数组但可能包含数组)或其他类型的对象,那么我们需要了解它的更多细节。

答案 1 :(得分:0)

如果没有可用的方法,我想你可以单独做一个简单的foreach循环。

   int count=0;
    foreach (var package in json)
    {
        count = count++;
    }
return this.Json(count.ToString());

来自here的编辑回复:

dynamic response = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<dynamic>(json);
 return (response.Length);