2017-05-07 6 views
2

개체가있는 JArray가 있는데 두 개의 속성이 있습니다. 예를 들어 :C#에서 KeyValuePair 구조체로 JArray를 변환하는 방법은 무엇입니까?

[ 
    {"Prop1":"key1", "Prop2":"value1"}, 
    {"Prop1":"key2", "Prop2":"value2"}, 
    {"Prop1":"key3", "Prop2":"value3"} 
] 

그리고 C#을 Prop1 및 Prop2의 같은

key1-value1 
key2-value2 
key3-value3 

이름도는 jarray 다른 가질 수 있음을 의미 변경할 수 있습니다에 (또는 사전 중요하지 않습니다) KeyValuePair에 구조를 필요 소품 이름이지만 개체의 속성 수는 항상 2가 될 것입니다. 따라서 으로 JArray를 deserialize하는 일반적인 방법이 필요합니다. 유형 JArray의 변수 array을 감안할 때

답변

1

, 당신은 System.Linq 네임 스페이스에서 다음 사용 extension 방법을 수행 할 수 있습니다

var pairs = array 
    // Cast array items from JToken to JObject. 
    // You could filter instead using `OfType<JObject>() if nulls might be present 
    .Cast<JObject>() 
    // Convert the first and second property values to a KeyValuePair 
    .Select(o => new KeyValuePair<string, string>((string)o.PropertyValues().ElementAtOrDefault(0), 
                (string)o.PropertyValues().ElementAtOrDefault(1))) 
    .ToList(); 

var dict = pairs.ToDictionary(p => p.Key, p => p.Value); 

샘플을 fiddle