Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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#_Asp.net_Json - Fatal编程技术网

C# 将json字符串拆分为其组成的第一个子节点,并将键放入字符串数组中

C# 将json字符串拆分为其组成的第一个子节点,并将键放入字符串数组中,c#,asp.net,json,C#,Asp.net,Json,我有一个Json文件,它有未知的子节点,每个子节点都有未知深度的子节点 我想将第一级子节点名称放入数组中 如果我不知道它们的名称或子节点的数量(即json结构是动态的),我该怎么做 例如json输入 { "childNode1":"value", "childNode2":"value", "childNode3":"value", "childNode4":"value" } 预期输出相当于此数组: string[] jsonArray = new[] { "childNode1"

我有一个
Json
文件,它有未知的子节点,每个子节点都有未知深度的子节点

我想将第一级子节点名称放入数组中

如果我不知道它们的名称或子节点的数量(即json结构是动态的),我该怎么做

例如json输入

{
"childNode1":"value", "childNode2":"value", "childNode3":"value", "childNode4":"value"
}
预期输出相当于此数组:

string[] jsonArray =
     new[] { "childNode1", "childnode2", "childNode3", "childnode4" };
我拥有的代码将向我显示调试器“locals”中的子项,我如何获取它们的键和值

JObject json = JObject.Parse(System.IO.File.ReadAllText(filePath));

如果我知道要查找哪些节点,我可以这样做,但在本例中我不知道?

如果将对象反序列化为字典,则可以轻松获取密钥。下面是一个使用的示例


如果将对象反序列化为字典,则可以轻松获取密钥。下面是一个使用的示例

你可以

IEnumerable<string> ParsePropertyNames(string s)
{
    var o = JObject.Parse(s);
    return o.Properties().Select(p => p.Name);
}
你可以

IEnumerable<string> ParsePropertyNames(string s)
{
    var o = JObject.Parse(s);
    return o.Properties().Select(p => p.Name);
}


您可以发布预期的输入和输出吗?输入在json示例中,此示例json的输出是一个4元素字符串数组,包含一级子键值json.Net或JavaScriptSerializer?@Fearghal您的语法无效。我改了,让我们知道你是不是这个意思。道歉(换成c#抓住我了)这正是我的意思。在现实生活中,这些节点中的每一个都可能有自己的子节点,但为了简单起见,我排除了您可以发布预期的输入和输出吗?输入在json示例中,此示例json的输出是一个4元素字符串数组,包含1级子项键值json.Net或JavaScriptSerializer?@Fearghal您的语法无效。我改了,让我们知道你是不是这个意思。道歉(换成c#抓住我了)这正是我的意思。在现实生活中,这些节点中的每一个都可能有自己的子节点,但为了简单起见,我排除了我将json字符串放在哪里的问题?s是您的json字符串。出现了一个错误,对其中一个节点无效,我不确定jsonserialiser为什么会在意,但….在解析值时遇到了意外字符:C.路径“”,第0行,位置0。。我创建了一个作业对象,我可以在我的调试器中看到它的子节点,必须有一种简单的方法从这里将子节点放入数组中?这是一个非常好的问题,可以让我保留我的作业对象以供进一步检查。我应该将我的json字符串放在哪里?s是您的json字符串。出现了一个错误,对其中一个节点无效,我不确定jsonserialiser为什么在意,但….在分析值时遇到了意外字符:C.路径“”,第0行,位置0。'我创建了一个JObject,并且我可以在调试器中看到它的子节点,必须有一种简单的方法从这里将子节点获取到数组中?这个问题非常好,可以让我保留我的作业对象以供进一步检查。我如何处理“结果”?另外,我认为您的字符串应该是ParsePropertyNames中的s?@Fearghal,这取决于您,它是一个字符串数组。
ParsePropertyNames
是一个函数,您可以将字符串传递给它,它可能位于一个名为
yourString
的变量中。是的,因此在函数中应该有var o=JObject.Parse(yourString);=var o=JObject.Parse;其中s作为param传入。我如何处理“results”?另外,我认为您的字符串应该是ParsePropertyNames中的s?@Fearghal,这取决于您,它是一个字符串数组。
ParsePropertyNames
是一个函数,您可以将字符串传递给它,它可能位于一个名为
yourString
的变量中。是的,因此在函数中应该有var o=JObject.Parse(yourString);=var o=JObject.Parse;其中s作为param传入。
IEnumerable<string> ParsePropertyNames(string s)
{
    var o = JObject.Parse(s);
    return o.Properties().Select(p => p.Name);
}
var results = ParsePropertyNames(yourString).ToArray();