动态查询Json对象

时间:2018-03-07 22:50:49

标签: c# .net json linq json.net

我正在尝试在JSON对象上实现动态条件。 搜索一段时间后,我找不到任何能满足我需求的资源。

以下面的方式,我将JsonObject动态字符串转换为jsonObject变量。

   string inputFromAPI = client.GetStringAsync(URL).Result;
   dynamic jsonObject = JValue.Parse(inputFromAPI);

我现在有一个可以根据需要改变的条件。例如,我可以有条件说 “inputFromAPI.DidWeCharge == true&& inputFromAPI.DidWeHold == false”

上述行可以随时更改。如何解决这个问题的任何输入将不胜感激。

3 个答案:

答案 0 :(得分:1)

我无法评论澄清(还没有代表),但如果您需要能够阅读属性名称,因为它正在改变,您可以这样做。你必须知道这个名字。

var JSONobj = JObject.Parse(json);

foreach (JToken child in JSONobj.Children())
{
    var prop = child as JProperty; 
    var propertyName = prop.Name; // this will give you the name of the property
    if (propertyName == "DidWeCharge")
    {

       var value = prop.Value; // Do something here with value?
    }
    if (propertyName == "DidWeHold")
    {
       var value = prop.Value; // Do something here with value?
    }

    var propertyType = prop.Value.Type; // this return the type as a JTokenType enum.
}

我不知道你的JSON是如何嵌套的,所以你可能不得不通过做child.Children()与另一个关于孩子的foreach进一步讨论。

答案 1 :(得分:0)

您可以使用ExpandoObject:

var expandoObj = JsonConvert.DeserializeObject<ExpandoObject>(jsonObject);

expandoObj.yourProperty

JsonConvert来自Newtonsoft.Json包。

答案 2 :(得分:0)

您可以使用Jpath

using Newtonsoft.Json -

....

var json = @"
{
    stuff : [
        {
            value : 1
        },
        { 
            value : 2
        }       
    ]
}";


var token = JToken.Parse(json);

var something = token.SelectTokens("$.stuff[?(@.value == 1)]").ToList();