C# 从父对象名称不固定的JSON字符串访问属性
我有以下JSON字符串,需要从中访问名为“Mode”的属性值:C# 从父对象名称不固定的JSON字符串访问属性,c#,json,json.net,C#,Json,Json.net,我有以下JSON字符串,需要从中访问名为“Mode”的属性值: { "CommomData": { "DateTime": { "Year": 2019, "Month": 3, "Day": 11, "Hour": 14, "Min": 1, "Second": 29 } }, "Status": { "Mode": "Test", "Loc": "Test" } } 如果
{
"CommomData": {
"DateTime": {
"Year": 2019,
"Month": 3,
"Day": 11,
"Hour": 14,
"Min": 1,
"Second": 29
}
},
"Status": {
"Mode": "Test",
"Loc": "Test"
}
}
如果您在此处注意到“Mode”的父属性名称,则此处为“Status”,但这可能会更改为“LatestStatus”或“FirstStatus”或任何其他值
目前,我已经编写了下面的代码,工作正常,但操作大约需要60到150毫秒(我们希望减少这段时间)。请注意,这个对象有更多的属性,但我只发布了一些来解释这个问题
在不知道对象类型和父属性名称的情况下,是否有其他最佳方法从JSON字符串获取值
JObject payloadJObject = JObject.Parse(payload);
foreach (var item in payloadJObject)
{
foreach (JProperty subitem in item.Value.ToList())
{
if (subitem.Name == "Mode")
{
return Convert.ToString(subitem.Value);
}
}
}
根据您对“最佳”的定义: 查找JSON中某个属性的最短方法是将JSON解析为,然后与递归下降一起使用: 小提琴: 据我所知,使用Json.Net执行相同操作的最快方法是使用:
小提琴:取决于您对“最佳”的定义: 查找JSON中某个属性的最短方法是将JSON解析为,然后与递归下降一起使用: 小提琴: 据我所知,使用Json.Net执行相同操作的最快方法是使用:
Fiddle:这是什么语言…?C#与Newtonsoft Json库(我们希望减少这一时间)-什么花费了时间?你的问题根本不能解释这一点,所以我们只能猜测你的问题是什么。问题中显示的JSON应该能够非常快速地解析。正如我提到的,该对象将具有许多属性(从100到1000不等)。我唯一的问题是,除了问题中提到的方法之外,我们还有其他方法吗?这是什么语言…?C#与Newtonsoft Json库(我们希望减少这一时间)-什么花费了时间?你的问题根本不能解释这一点,所以我们只能猜测你的问题是什么。问题中显示的JSON应该能够非常快速地解析。正如我提到的,该对象将具有许多属性(从100到1000不等)。我唯一的问题是,除了问题中提到的方法之外,我们还有其他方法吗?这太棒了。。非常感谢你。。。我将尝试我的目标并决定方法。这太棒了。。非常感谢你。。。我将尝试我的目标并决定方法。
public static string FindFirst(string json, string propertyName)
{
return JObject.Parse(json).SelectToken("$.." + propertyName)?.ToString();
}
public static string FindFirst(string json, string propertyName)
{
using (StringReader sr = new StringReader(json))
using (JsonReader reader = new JsonTextReader(sr))
{
while (reader.Read())
{
if (reader.TokenType == JsonToken.PropertyName &&
reader.Value.ToString() == propertyName)
{
return reader.ReadAsString();
}
}
return null;
}
}