C# 如何递归地迭代json数据

C# 如何递归地迭代json数据,c#,json,json.net,C#,Json,Json.net,如何通过给定的Jtoken键搜索json数据,这个Jtoken可以在json数据中无处不在。我找到了下面的代码,它可以工作,但由于json对我来说是新的,我只想知道是否有更好的解决方案 //resources is some json data JToken node = JToken.Parse(resources); var ids = new List<string>(); WalkNode(node, n =&g

如何通过给定的Jtoken键搜索json数据,这个Jtoken可以在json数据中无处不在。我找到了下面的代码,它可以工作,但由于json对我来说是新的,我只想知道是否有更好的解决方案

       //resources is some json data
       JToken node = JToken.Parse(resources);

        var ids = new List<string>();

        WalkNode(node, n =>
        {
            JToken token = n["OrderId"];
            if (token != null && token.Type == JTokenType.String)
                mediaLinkHrefs.Add(token.Value<string>());
        });



    private static void WalkNode(JToken node, Action<JObject> action)
    {
        if (node.Type == JTokenType.Object)
        {
            action((JObject)node);

            foreach (JProperty child in node.Children<JProperty>())
            {
                WalkNode(child.Value, action);
            }
        }
        else if (node.Type == JTokenType.Array)
        {
            foreach (JToken child in node.Children())
            {
                WalkNode(child, action);
            }
        }
    }
//资源是一些json数据
JToken节点=JToken.Parse(参考资料);
var id=新列表();
WalkNode(节点,n=>
{
JToken令牌=n[“OrderId”];
if(token!=null&&token.Type==JTokenType.String)
mediaLinkHrefs.Add(token.Value());
});
私有静态void WalkNode(JToken节点,Action-Action)
{
if(node.Type==JTokenType.Object)
{
动作((作业对象)节点);
foreach(node.Children()中的JProperty子级)
{
WalkNode(child.Value,action);
}
}
else if(node.Type==JTokenType.Array)
{
foreach(在node.Children()中的JToken子节点)
{
WalkNode(子节点、动作);
}
}
}

选择更快的方式,如:

转到粘贴json,它将创建一个从json派生的自定义类

使用syster.web.script.serialization中的javascriptserializer进行调用

假设您将json响应放入S字符串中,并且您的类名为RootObject

string S = JSON;
javascriptserializer js = new javascriptserializer();
RootObject o = js.deserialize<RootObject>(S);

dim S a string=JSON 'your json string
dim jsas new javascriptserializer
dim o as RootObject=js.deserialize(of RootObject)(s)
string S=JSON;
javascriptserializer js=新的javascriptserializer();
RootObject o=js.反序列化;
dim S a string=JSON'您的JSON字符串
dim jsas新javascriptserializer
dim o as RootObject=js.反序列化(RootObject的)(s)
然后您可以简单地使用linq,仅此而已

3行代码:D


希望这能对您有所帮助。

您的json是什么,您希望实现什么?很可能你不需要递归的方法…更好的解决方案是什么?速度、内存消耗等等?上面的代码适用于任何json数据,只是想看看这里是否有人有更好的代码,但实现了相同的算法。这是一个很好的例子