【问题标题】:JToken does not contain a definition for 'lengthJToken 不包含“长度”的定义
【发布时间】:2018-06-26 20:28:09
【问题描述】:

我在一个扩展名为 .json 的文件中有一个 JSON 数据。我从文件中抓取并读取 JSON。我的问题是如何检查payment 数组是否有子元素。

我尝试过o2["payment"].length(),但它给了我一个错误

'JToken' 不包含'length' 的定义,也没有扩展名 接受“JToken”类型的第一个参数的方法“长度”可以是 找到(您是否缺少 using 指令或程序集引用?)

我正在使用Json.NET

{
    "bank_name": "MyBank",
    "payment": [
        {
            "ssn": "123456789",
            "description": "Payment for income tax for 2015",
            "amount": "55.00"
        },
        {
            "ssn": "123456789",
            "description": "Payment for income tax for 2016",
            "amount": "95.10"
        },
        {
            "ssn": "123456789",
            "description": "Payment for income tax for 2017",
            "amount": "35.03"
        }
    ]
}




public ActionResult ReadFile()
{

    var Path = "C:\\Payment";
    var PendingPath = Path + "\\Pending";

    string[] FilePaths = Directory.GetFiles(@PendingPath, "*.json");
    foreach ( var CurrentFile in FilePaths )
    {
        using (StreamReader file = System.IO.File.OpenText(CurrentFile))
        using (JsonTextReader reader = new JsonTextReader(file))
        {
            JObject o2 = (JObject)JToken.ReadFrom(reader);
            var bank_name = o2["bank_name"];
            if ( o2["payment"].length() ) //Check here if payment has any children
            {

            }
        }
    }

    return new EmptyResult();
}

【问题讨论】:

  • o2["payment"] 转换为 JArray
  • @Sxntk 我尝试像(JArray) o2["payment"] 一样投射。我收到一个错误“无法将类型“Newtonsoft.Json.Linq.JArray”隐式转换为“bool”。存在显式转换(您是否缺少演员表?
  • 条件应该是((JArray)o2["payment"]).Count > 0
  • @Sxntk 很好用。请将其添加为答案。

标签: c# asp.net json.net


【解决方案1】:

如果你想使用数组的方法,你应该强制转换对象:

if (((JArray)o2["payment"]).Count > 0)
{
    // Logic...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    相关资源
    最近更新 更多