如何从一个对象中的另一个对象中提取值?

3

我在如何从一个对象中获取另一个对象的值方面遇到了一些困难。我尝试了很多方法,但似乎无法返回该值。

变量结果返回 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
  }
}

1
我建议在这种情况下使用Json.NET的JObject模型,而不是强类型反序列化。 - Dai
1个回答

0

无需将json反序列化为对象,因为当您从json中删除属性时,属性C的对象的默认值仍为0,这将生成相同的json。

请查看{{link1: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类型的值,请使用decimal/double.TryParse,并在TryParse为true且out double/decimal <= 0的情况下删除该元素。

@L.B 他想要检查的不仅是Stats的属性,还有其他的吗? - mybirthname
@user3515765,你可以检查链接,那里有一个完整的工作示例。如果有帮助,请将答案标记为正确。 - mybirthname
@mybirthname public static void Main() { Console.WriteLine("你好,世界"); } 不是一个可行的示例.... :) - L.B
如果它不是动态的,那么我该如何在你的示例中填充JSON字符串?我会尝试。 - user3515765
没有返回值:/ 不管怎样,感谢您的帮助 :) - user3515765
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接