J'ai un objet dynamique qui ressemble à ça,
{
"2" : "foo",
"5" : "bar",
"8" : "foobar"
}
Comment puis-je le convertir en dictionary
?
Vous pouvez utiliser un RouteValueDictionary
pour convertir un objet C # en dictionnaire. Voir: Classe RouteValueDictionary - MSDN . Il convertit les propriétés object
en paires clé-valeur.
Utilisez-le comme ceci:
var toBeConverted = new {
foo = 2,
bar = 5,
foobar = 8
};
var result = new RouteValueDictionary(toBeConverted);
Si la valeur dynamique en question a été créée via la désérialisation de Json.Net comme vous l'avez mentionné dans vos commentaires, alors ce devrait être un JObject
. Il s'avère que JObject
implémente déjà IDictionary<string, JToken>
, vous pouvez donc l'utiliser comme dictionnaire sans aucune conversion, comme illustré ci-dessous:
string json =
@"{ ""blah"" : { ""2"" : ""foo"", ""5"" : ""bar"", ""8"" : ""foobar"" } }";
var dict = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(json);
dynamic dyn = dict["blah"];
Console.WriteLine(dyn.GetType().FullName); // Newtonsoft.Json.Linq.JObject
Console.WriteLine(dyn["2"].ToString()); // foo
Si vous préférez avoir un Dictionary<string, string>
à la place, vous pouvez le convertir comme ceci:
Dictionary<string, string> newDict =
((IEnumerable<KeyValuePair<string, JToken>>)dyn)
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToString());
Vous pouvez remplir le dictionnaire par réflexion:
public Dictionary<String, Object> Dyn2Dict(dynamic dynObj)
{
var dictionary = new Dictionary<string, object>();
foreach (PropertyDescriptor propertyDescriptor in TypeDescriptor.GetProperties(dynObj))
{
object obj = propertyDescriptor.GetValue(dynObj);
dictionary.Add(propertyDescriptor.Name, obj);
}
return dictionary;
}
Vous pouvez utiliser Json.Net pour le désérialiser en dictionnaire.
string json = dynamicObject.ToString(); // suppose `dynamicObject` is your input
Dictionary<string, string> dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
Une autre façon consiste à utiliser System.Web.Helpers.Json inclus dans .NET 4.5.
Json.Encode (objet) et Json.Decode. Comme:
Json.Decode<Generic.Dictionary<string, string>>(value);
Cordialement, MarianoC.
Vous pouvez le faire avec jsonSerializer. Et cela nécessite une référence System.Net.Extensions. Voici un exemple de code.
var jss = new JavaScriptSerializer();
var dict = jss.Deserialize<Dictionary<string,string>>(jsonText);
var place = dict["8"]; // "foobar"