我对如何从对象中的对象获取值感到困惑。我尝试了很多方法,但似乎无法返回值。
var结果返回Json:
{
"Date": "2016-12-14"
"Stats": {
"A": 9.23,
"B": 5.63,
"C": 0
}
}
尝试访问" Stats"的代码值:
var apiResult = await client.GetStringAsync(url);
var results = apiResult.DeserializeObject<StatsLA>(apiResult);
object[] getValues = results.GetType()
.GetProperties()
.Select(p =>
{
object value = p.GetValue(results);
return value == null ? null : value.ToString();
})
.ToArray();
最终目标是循环结果并仅返回大于0的值。仅在此示例中&#34; A&#34;和&#34; B&#34;会回来的。我知道如何执行loop / linq语句,但首先我需要获取值。任何建议都会受到赞赏,或只是指出如何接近的正确方向。
这是类文件:
public class StatsLA
{
public string Date { get; set; }
public LocalStats stats { get; set; }
}
public class LocalStats
{
public double A { get; set; }
public double B { get; set; }
public double C { get; set; }
}
期望的结果:
{
"Date": "2016-12-14"
"Stats": {
"A": 9.23,
"B": 5.63
}
}
答案 0 :(得分:0)
不需要Deserialize
json来对象,因为当你从json中删除属性时,属性C
的对象的默认值仍然是0,这将生成相同的json。
检查full example at dotNetFiddle
public static void Main(string[] args)
{
string json = @"{
""Date"": ""2016-12-14"",
""Stats"": {
""A"": 9.23,
""B"": 5.63,
""C"": 0
}
}";
JObject result = JsonConvert.DeserializeObject<JObject>(json);
JObject statsObj = (JObject)result["Stats"];
for(int i = statsObj.Properties().Count()-1; i>=0; i--)
{
var propValue = statsObj.Properties().Skip(i).FirstOrDefault();
if (decimal.Parse(propValue.Value.ToString()) <= 0)
propValue.Remove();
}
string endResult = result.ToString();
}
如果Stats
对象中的值与十进制类型不同,请使用decimal/double.TryParse
并删除TryParse
为真的元素和out double/decimal <= 0
的值