2016-12-14 5 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이 사실과 아웃 double/decimal <= 0의 값 경우 요소를 제거합니다.

+0

하지만 OP는 0 ... –

+0

@ L.B의 콘크리트 유형을 확인해야합니다. 그는 double을 사용할 수 있습니다. 트리 문자 – mybirthname

+0

@ L.B 그는 Stats 또는? – mybirthname

관련 문제