如何从JObject中通过关键字获取值?

55

我有一个像这样的JObject:

{
  "@STARTDATE": "'2016-02-17 00:00:00.000'",
  "@ENDDATE": "'2016-02-18 23:59:00.000'"
}

我想从JObject中获取@STARTDATE和@ENDDATE的值。


这是我尝试完成任务的示例代码:

JObject json = JObject.Parse("{\"@STARTDATE\": \"'2016-02-17 00:00:00.000'\",\"@ENDDATE\": \"'2016-02-18 23:59:00.000'\"}");
var key = "@STARTDATE";

var value = GetJArrayValue(json, key);

private string GetJArrayValue(JObject yourJArray, JToken key)
{
    string value = "";
    foreach (JToken item in yourJArray.Children())
    {
        var itemProperties = item.Children<JProperty>();
        //If the property name is equal to key, we get the value
        var myElement = itemProperties.FirstOrDefault(x => x.Name == key.ToString());
        value = myElement.Value.ToString(); //It run into an exception here because myElement is null
        break;
    }
    return value;
}

注意:上面的代码无法从JObject中按键获取值。


能否帮我找到一种从JObject按键获取值的方法?


5
你可以查看这个文档页面:http://www.newtonsoft.com/json/help/html/linqtojson.htm。 - mymo
谢谢。我得学到更多关于这个的知识。 - Trind 07
3个回答

87

这应该会有所帮助 -

var json = "{'@STARTDATE': '2016-02-17 00:00:00.000',  '@ENDDATE': '2016-02-18 23:59:00.000' }";
var fdate = JObject.Parse(json)["@STARTDATE"];

13
如果您想要一个字符串,左侧是一个JToken,您需要在右侧加上.ToString()。 - joedotnot

18

您还可以像这样获取jObject中项目的值:

JToken value;
if (json.TryGetValue(key, out value))
{
   DoSomething(value);
}

12

试试这个:

private string GetJArrayValue(JObject yourJArray, string key)
{
    foreach (KeyValuePair<string, JToken> keyValuePair in yourJArray)
    {
        if (key == keyValuePair.Key)
        {
            return keyValuePair.Value.ToString();
        }
    }
}

只返回翻译文本:如果有任何子类别,则不起作用。不支持子类别。 - priya_21

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接