2016-12-15 13 views

答えて

1

あなたはをインストールし、プロパティを照会するLINQ to JSONを使用することができます。

var jsonString = @"{ 
    ""Date"": ""2016-12-15"", 
    ""Data"": { 
     ""A"": 4.4023, 
     ""AB"": 1.6403, 
     ""ABC"": 2.3457 
    } 
}"; 

var root = JToken.Parse(jsonString); 

var properties = root 
    // Select nested Data object 
    .SelectTokens("Data") 
    // Iterate through its children, return property names. 
    .SelectMany(t => t.Children().OfType<JProperty>().Select(p => p.Name)) 
    .ToArray(); 

Console.WriteLine(String.Join(",", properties)); // Prints A,AB,ABC 

サンプルfiddle

+0

回答ありがとうございます;)良い週末を持っています – cool

0

組み込みのJavaScriptSerializerを使用して、逆シリアル化してobjectにすることができます。この場合、任意のJSONオブジェクトは実際にIDictionary<string, object>にデシリアライズされます。そして、あなたは、このような辞書に戻っobjectをキャストすることができますし、(再帰的に)そのキーと値を含め、その内容を照会:

var jsonString = @"{ 
    ""Date"": ""2016-12-15"", 
    ""Data"": { 
     ""A"": 4.4023, 
     ""AB"": 1.6403, 
     ""ABC"": 2.3457 
    } 
}"; 

var root = new JavaScriptSerializer().Deserialize<object>(jsonString); 

var properties = root 
    // Select nested Data object 
    .JsonPropertyValue("Data") 
    // Iterate through its children, return property names. 
    .JsonPropertyNames() 
    .ToArray(); 

Console.WriteLine(String.Join(",", properties)); // Prints A,AB,ABC 

拡張メソッドを使用する:

public static class JavaScriptSerializerObjectExtensions 
{ 
    public static object JsonPropertyValue(this object obj, string key) 
    { 
     var dict = obj as IDictionary<string, object>; 
     if (dict == null) 
      return null; 
     object val; 
     if (!dict.TryGetValue(key, out val)) 
      return null; 
     return val; 
    } 

    public static IEnumerable<string> JsonPropertyNames(this object obj) 
    { 
     var dict = obj as IDictionary<string, object>; 
     if (dict == null) 
      return null; 
     return dict.Keys; 
    } 
} 
+0

ありがとうございましたdbc。良い一日を過ごしてください – cool

関連する問題