从父对象名称不固定的 JSON 字符串访问属性

我有以下 JSON 字符串,我需要从中访问名为“Mode”的属性值:


{

  "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);

        }

    }

}


喵喵时光机
浏览 131回答 1
1回答

有只小跳蛙

根据您对“最佳”的定义:在 JSON 中某处查找属性的最短方法是将 JSON 解析为 a JObject,然后SelectToken与递归下降JsonPath 表达式一起使用:public static string FindFirst(string json, string propertyName){     return JObject.Parse(json).SelectToken("$.." + propertyName)?.ToString();}小提琴:https ://dotnetfiddle.net/JQxu9c我知道用 Json.Net 做同样事情的最快JsonTextReader方法是使用: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;    }}小提琴:https ://dotnetfiddle.net/aR3qVe
打开App,查看更多内容
随时随地看视频慕课网APP