2016-12-14 8 views
3

オブジェクト内のオブジェクトから値を取得する方法についてちょっと固まっています。私は数多くの方法を試しましたが、値を返すことはできません。試してみて、アクセス「統計」の値にオブジェクト内のオブジェクトから値を抽象化する方法はありますか?

{ 
    "Date": "2016-12-14" 
    "Stats": { 
    "A": 9.23, 
    "B": 5.63, 
    "C": 0 
    } 
} 

コード:

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(); 

最終目標は、結果をループし、よりをされている値のみを返す

VAR結果は、JSON、これを返しますこの例では、 "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

答えて

0

あなたがJSON、デフォルト値からプロパティを削除する場合ので、オブジェクトへDeserialize 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型と異なる値を持つ場合は、decimal/double.TryParseを使用してTryParseがtrueで、う​​ちdouble/decimal <= 0の値場合の要素を削除します。

+0

しかし、今OPは具体的なタイプをチェックしなければなりません0 .... –

+0

@ L.B彼はdoubleを使うことができます。TryingParse – mybirthname

+0

@ L.B彼はStatsのプロパティだけでなく、 – mybirthname

関連する問題