我正在尝试在JSON对象上实现动态条件。 搜索一段时间后,我找不到任何能满足我需求的资源。
以下面的方式,我将JsonObject动态字符串转换为jsonObject变量。
string inputFromAPI = client.GetStringAsync(URL).Result;
dynamic jsonObject = JValue.Parse(inputFromAPI);
我现在有一个可以根据需要改变的条件。例如,我可以有条件说 “inputFromAPI.DidWeCharge == true&& inputFromAPI.DidWeHold == false”
上述行可以随时更改。如何解决这个问题的任何输入将不胜感激。
答案 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();