首页 > 解决方案 > 令牌中有句点时的 JProperty SelectToken

问题描述

这是我的 JSON 的一部分

"facets": {
    "brand": {
      "Feit Electric": 175,
      "Halco Lighting": 28,
      "Satco": 6,
      "Mr Longarm": 3,
      "J&J Electronics": 2,
      "Texas Fluorescents": 2,
      "Dabmar Lighting": 1
    },
    "status": {
      "Active": 221
    },
    "bvc_product_type": {
      "Light Bulbs": 214,
      "Generic Product": 4,
      "Light Fixtures": 3
    },
    "product_type.lvl0": {
      "Lighting": 185,
      "Manufacturers": 19,
      "Closeout Specials": 9,
      "Lawn, Garden & Pool": 5
    }
  },

我正在使用检索 JSON 的部分代码是这样的......

if (res["facets"] != null)
            {
                instance.Refinables = new List<IRefinable>();
                foreach (JProperty item in res["facets"])
                {
                    Refinable refinable = new Refinable();
                    refinable.Values = new List<IRefinableValue>();
                    refinable.Name = item.Name;

                    foreach (JProperty prop in res["facets"].SelectToken(item.Name))
                    {
                        IRefinableValue refinableValue = new RefinableValue();
                        refinableValue.RefinableName = item.Name;
                        refinableValue.Name = prop.Name.ToString();
                        refinableValue.Count = Convert.ToInt32(prop.Value.ToString());

                        refinable.Values.Add(refinableValue);
                    }

                    instance.Refinables.Add(refinable);
                }
            }

SelectToken(item.Name) 运行良好,除非 JSON 返回构面的层次结构(.lvl0 .lvl1 等...)。

我得到的错误是这个。

“你调用的对象是空的。”

任何有关选择 JProperty 的帮助将不胜感激。谢谢。

标签: c#jsonjson.net

解决方案


您可以转义您传递给该SelectToken方法的名称。

res["facets"].SelectToken($"['{item.Name}']")

参考:https ://www.newtonsoft.com/json/help/html/QueryJsonSelectTokenEscaped.htm


推荐阅读