在Newtonsoft JObject中查找JToken的路径/命名空间

本文关键字:路径 命名空间 JToken 查找 Newtonsoft JObject | 更新日期: 2023-09-27 17:54:07

我有以下代码示例(c#使用Newtonsoft Json.NET),将Json字符串序列化为JObject:

var obj = JObject.Parse("{'"F01'" : '"f01'", " +
                    "'"F02'" : '"f02'", " +
                    "'"L01'" : [" +
                        "{" +
                            "'"L01F01'" : '"l01f01'", " +
                            "'"L01F02'" : '"l01f02'"" +
                        "}, " +
                        "{" +
                            "'"L01F01'" : '"l01f01'", " +
                            "'"L01F02'" : '"l01f02'"" +
                        "}, " +
                        "{" +
                            "'"L01F03'" : '"l01f03'" " +
                        "}, " +
                        "{" +
                            "'"L01F03'" : '"l01f03'", " +
                            "'"L01L02'" : [" +
                                "{" +
                                    "'"L01L02F01'" : '"l01l02f01'"" +
                                "}" +
                            "]" +
                        "}" +
                    "]" +
                    "}");

请注意,JSON有一个动态结构,不是数组中的所有项都有相同的名称和属性。

并创建以下JTokens:

var test01 = obj["F01"];
var test02 = obj["L01"][0]["L01F01"];
var test03 = obj["L01"][3]["L01L02"][0]["L01L02F01"];

我想知道是否有人知道任何方法来获得测试变量的"路径"在这种类似的方式:

GetPathOf(test01) => "F01"
GetPathOf(test02) => "L01[0].L01F01"
GetPathOf(test03) => "L01[3].L01L02[0].L01L02F01"

谢谢!

在Newtonsoft JObject中查找JToken的路径/命名空间

在版本5.0.1(2013年4月7日)中,Path属性被添加到JToken中,这正是您所描述的。

在你的例子中,你可以简单地写:

string path03 = test03.Path;

path03变量将包含L01[3].L01L02[0].L01L02F01

小提琴:https://dotnetfiddle.net/5Dhc4i