Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从JSON对象c构建属性列表#_C#_Json_Json.net - Fatal编程技术网

C# 从JSON对象c构建属性列表#

C# 从JSON对象c构建属性列表#,c#,json,json.net,C#,Json,Json.net,我想构建包含json对象的属性路径的属性列表 我不知道json的结构或可能存在的键。我关注所有级别的键(而不是那些键的值) 期望输出: .Primitive_1 .Object_L1.Object_L2.Object_L3.Object_L4.Object_L5.Object_L6.Array_L7.0.asdasdas .Object_L1.Object_L2.Object_L3.Object_L4.Object_L5.Object_L6.Array_L7.0.WIDTH .Object_L1

我想构建包含json对象的属性路径的属性列表

我不知道json的结构或可能存在的键。我关注所有级别的键(而不是那些键的值)

期望输出:

.Primitive_1 .Object_L1.Object_L2.Object_L3.Object_L4.Object_L5.Object_L6.Array_L7.0.asdasdas
.Object_L1.Object_L2.Object_L3.Object_L4.Object_L5.Object_L6.Array_L7.0.WIDTH
.Object_L1.Object_L2.Object_L3.Object_L4.Object_L5.Object_L6.Array_L7.1.gh45gdfg
.Object_L1.Object_L2.Object_L3.Object_L4.Object_L5.Object_L6.Array_L7.1.WIDTH
.Object_L1.Object_L2.Object_L3.Object_L4.Object_L5.Object_L6.12836hasvdkl
.Object_L1.Object_L2.Object_L3.Object_L4.Object_L5.Object_L6.WIDTH
.Object_L1.Object_L2.Object_L3.712bedfabsmdo98
.Object_L1.Object_L2.Object_L3.WIDTH
.Object_L1.ALIAS_ID
.Primitive_2
.Primitive_3
.Primitive_4
环顾四周,我得到了对象的根节点。看小提琴()

这在JS()中似乎相对简单,我已经查看了几个响应,在c#中找不到一个在不知道使用中的键(我不知道)的情况下解决这个问题的响应


任何帮助都将不胜感激。

树遍历算法本质上几乎总是递归的

因此,以下函数满足您的要求:

private static IEnumerable<string> GetMembers(JToken jToken)
{
    var members = new List<string>();

    if (jToken is JObject)
    {
        var jObject = (JObject)jToken;

        foreach (var prop in jObject.Properties())
        {
            if (prop.Value is JValue)
            {
                members.Add(prop.Name);
            }
            else
            {
                members.AddRange(GetMembers(prop.Value).Select(member => prop.Name + "." + member));
            }
        }
    }
    else if (jToken is JArray)
    {
        var jArray = (JArray)jToken;

        for (var i = 0; i < jArray.Count; i++)
        {
            var token = jArray[i];

            members.AddRange(GetMembers(token).Select(member => i + "." + member));
        }
    }

    return members;
}
私有静态IEnumerable GetMembers(JToken JToken)
{
var members=新列表();
如果(jToken是JObject)
{
var jObject=(jObject)jToken;
foreach(jObject.Properties()中的var prop)
{
如果(属性值为JValue)
{
成员。添加(道具名称);
}
其他的
{
AddRange(GetMembers(prop.Value).Select(member=>prop.Name+“+member));
}
}
}
else if(jToken是JArray)
{
var jArray=(jArray)jToken;
for(var i=0;ii+“+member));
}
}
返回成员;
}

代码运行的一个例子是可用的。

树遍历算法本质上几乎总是递归的

因此,以下函数满足您的要求:

private static IEnumerable<string> GetMembers(JToken jToken)
{
    var members = new List<string>();

    if (jToken is JObject)
    {
        var jObject = (JObject)jToken;

        foreach (var prop in jObject.Properties())
        {
            if (prop.Value is JValue)
            {
                members.Add(prop.Name);
            }
            else
            {
                members.AddRange(GetMembers(prop.Value).Select(member => prop.Name + "." + member));
            }
        }
    }
    else if (jToken is JArray)
    {
        var jArray = (JArray)jToken;

        for (var i = 0; i < jArray.Count; i++)
        {
            var token = jArray[i];

            members.AddRange(GetMembers(token).Select(member => i + "." + member));
        }
    }

    return members;
}
私有静态IEnumerable GetMembers(JToken JToken)
{
var members=新列表();
如果(jToken是JObject)
{
var jObject=(jObject)jToken;
foreach(jObject.Properties()中的var prop)
{
如果(属性值为JValue)
{
成员。添加(道具名称);
}
其他的
{
AddRange(GetMembers(prop.Value).Select(member=>prop.Name+“+member));
}
}
}
else if(jToken是JArray)
{
var jArray=(jArray)jToken;
for(var i=0;ii+“+member));
}
}
返回成员;
}

代码运行的示例可用。

问题中没有FIDDLES张贴您的代码。也看看这里:你需要进化-你是一个救生员!你能把答案也贴出来吗?那么我可以接受吗?不要在问题中贴上你的代码。也看看这里:你需要进化-你是一个救生员!你能把答案也贴出来吗?这样我就可以接受了?