2017-05-07 1 views
2

J'ai un JArray avec des objets ont deux propriétés. Par exemple:Comment convertir une structure JArray en KeyValuePair en C#?

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

Et je dois KeyValuePair (ou dictionnaire n'a pas d'importance) la structure en C#, comme

key1-value1 
key2-value2 
key3-value3 

Les noms des Prop1 et PROP2 peut aussi changer ce qui signifie que jarray peut avoir différents les noms de prop, mais le nombre de propriétés dans l'objet sera toujours 2. Alors que j'ai besoin de méthode générale qui désérialiser le JArray à List<KeyValuePair>.

Répondre

1

Compte tenu d'une array variable de type JArray, vous pouvez effectuer les opérations suivantes à l'aide de méthodes extension de l'espace de noms System.Linq:

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

échantillon fiddle