我对如何从对象中的对象获取值有点困惑。我尝试了很多方法,但似乎无法返回值。
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 的值。在此示例中,只有“A”和“B”会返回。我知道如何执行循环/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
}
}
最佳答案
没有必要 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
则删除元素为真,输出的值为double/decimal <= 0
.
关于c# - 如何从对象中的对象抽象值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41152507/