【问题标题】:Count of Json List without knowing the Type不知道类型的 Json 列表计数
【发布时间】:2017-10-24 19:34:23
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您的问题并不完全清楚 GetAll 是否返回 JSON 数组,或者它是否返回某种 IEnumerable(或其他东西),然后您将其转换为 JSON。 (问题的文字似乎暗示了前者,但代码似乎做了后者。)

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

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

    如果GetAll 方法总是返回某种IEnumerable 而不是 JSON,您可以执行以下操作来获取计数:

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

    (请注意,您需要在代码顶部使用 using System.Linq; 才能使其正常工作。)

    如果GetAll 返回其他东西,例如 JSON 对象(不是数组,但可能包含数组),或者其他类型的对象,那么我们需要知道更多关于它是什么的细节。

    【讨论】:

    • 对不起,没有写得很清楚。 GetAll 方法返回一个 IEnumerablem,Api 的结果是一个 JSON。第二行是正确的并且可以完美运行:D
    【解决方案2】:

    如果没有可用的方法,我想您可以单独执行一个简单的 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);
    

    【讨论】:

    • 这是行不通的,因为 json 是一个 JsonResult,并且 JsonResult 对象没有公共的 GetEnumerator 定义
    • 我很难用看似通用的方法 'GetMethod' 和 'Invoke' 来解决这个问题,但请试一试我的编辑。
    • 不工作。 json 不是字符串对象,只是一个对象。反序列化接收一个字符串。但是你给了我一个想法。将 json 转换为字符串。我去找那个。谢谢
    猜你喜欢
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2019-06-10
    • 2011-08-18
    • 2021-07-11
    • 1970-01-01
    相关资源
    最近更新 更多