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

时间:2013-01-17 16:00:38

标签: c# .net json path json.net

我有以下代码示例(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"

谢谢!

1 个答案:

答案 0 :(得分:1)

Path(2013年4月7日)JToken中添加了release 5.0.1属性,完全符合您的描述。

所以在你的例子中你可以简单地写一下:

string path03 = test03.Path;

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

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