令牌中包含句点时的JProperty SelectToken

时间:2018-09-12 14:25:24

标签: c# json json.net

这是我的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);
                }
            }

除了JSON返回构面的层次结构(.lvl0 .lvl1等)之外,SelectToken(item.Name)效果很好。

我得到的错误是这个。

“对象引用未设置为对象的实例。”

在选择JProperty方面的任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:2)

您可以忽略传递给SelectToken方法的名称。

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

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