2017-10-24 4 views
0

Mit einer GET-API-Methode muss ich die Anzahl aller Datensätze einer Tabelle mit Entity Framework abrufen. Die Methode erhält einen Tabellennamen und damit bekomme ich die Assembly und bekomme alle Datensätze. Aber das Ergebnis ist ein JSON und ich habe nicht herausgefunden, wie man das zählt.Anzahl der Json-Liste ohne den Typ zu kennen

Hier ist mein Code:

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); 
} 

Antwort

1

Es ist nicht ganz klar, aus Ihrer Frage, ob GetAll ein JSON-Array zurückgibt, oder ob es gibt eine Art von IEnumerable (oder etwas anderes), die Sie dann Umwandlung in JSON. (Der Text der Frage scheint Ersteres zu suggerieren. Der Code scheint letzteres zu tun.)

Wenn GetAll immer eine JSON-Zeichenfolge zurückgibt, die ein Array von Elementen darstellt, können Sie folgendermaßen vorgehen, um die Anzahl zu erhalten:

int count = Newtonsoft.Json.Linq.JArray.Parse((string)executionMethod).Count; 

Wenn GetAll Methode immer eine Art von IEnumerable anstatt JSON zurückgibt, können Sie die folgende bekommen die Zählung tun:

int count = ((IEnumerable)executionMethod).Cast<object>().Count(); 

(Beachten Sie, dass Siebenötigen 10 an der Spitze des Codes für diese arbeiten.)

Wenn GetAll kehrt etwas anderes, wie ein JSON Objekt (kein Array aber vielleicht ein Array) oder eine andere Art von Objekt enthält, dann müssten wir mehr Details darüber wissen, was es ist.

+0

Sorry für nicht ganz klar zu schreiben. Die Methode GetAll gibt ein IEnumerable zurück, und das Ergebnis von Api ist ein JSON. Die zweite Zeile ist korrekt und funktioniert einwandfrei: D –

0

Ich nehme an, Sie können separat eine einfache foreach-Schleife tun, dies zu tun, wenn es keine Methode zur Verfügung steht.

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

bearbeitet Antwort von here Quellen:

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

Dies ist nicht funktionieren, weil JSON ein JsonResult ist, und die JsonResult -Objekte haben keine öffentliche GetEnumerator-Definition –

+0

Es ist schwer für mich, dies mit den scheinbar generischen Methoden 'GetMethod' & 'Invoke' zu beheben, aber geben Sie meine einen Schuss bearbeiten – Waragi

+0

Nicht funktionieren. Der JSON ist kein String-Objekt, nur ein Objekt. Deserialize erhalten eine Zeichenfolge. Aber du hast mir eine Idee gegeben. Wirf den JSON auf String. Ich suche danach. Thx –

Verwandte Themen