C# 从JSON对象c构建属性列表#
我想构建包含json对象的属性路径的属性列表 我不知道json的结构或可能存在的键。我关注所有级别的键(而不是那些键的值) 期望输出: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
.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张贴您的代码。也看看这里:你需要进化-你是一个救生员!你能把答案也贴出来吗?那么我可以接受吗?不要在问题中贴上你的代码。也看看这里:你需要进化-你是一个救生员!你能把答案也贴出来吗?这样我就可以接受了?