c# - 令牌中有句点时的 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 的帮助将不胜感激。谢谢。
解决方案
您可以转义您传递给该SelectToken
方法的名称。
res["facets"].SelectToken($"['{item.Name}']")
参考:https ://www.newtonsoft.com/json/help/html/QueryJsonSelectTokenEscaped.htm
推荐阅读
- excel - 在 VBA 中使用异步回调函数是否安全?
- css - 伪类(第 n 个孩子或第一个孩子)不起作用
- r - 如何将阻塞函数包装到承诺 RShiny
- sql - SQL: how to use row_number() function to assign the same number for rows with duplicate ids in a repeating format
- mysql - 选择日期时间在下一小时内的记录
- android-recyclerview - How to start dialogFragment from RecyclerView Adapter
- python - Validate end_time is bigger than start_time django form
- scala - IntelliJ 警告:“特征中使用的抽象值可能会在初始化期间导致错误”- LAZY abstract val-s 有什么问题?
- php - Symfony 4 - 'Symfony\Component\HttpFoundation\File\File' 的 VichUploader 序列化是不允许的
- python - How to set filter range in backend in filter class in django