如何从对象中的对象中提取值?

时间:2016-12-14 21:30:11

标签: c# arrays json linq object

我对如何从对象中的对象获取值感到困惑。我尝试了很多方法,但似乎无法返回值。

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
  }
}

1 个答案:

答案 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的值