将动态类型转换为字典C#

我有一个看起来像这样的动态对象,

{ "2" : "foo", "5" : "bar", "8" : "foobar" } 

如何将其转换为dictionary

您可以使用RouteValueDictionary将C#对象转换为字典。 请参阅: RouteValueDictionary类 – MSDN 。 它将object属性转换为键值对。

像这样用它:

 var toBeConverted = new { foo = 2, bar = 5, foobar = 8 }; var result = new RouteValueDictionary(toBeConverted); 

如果您在评论中提到的Json.Net反序列化创建了有问题的动态值,那么它应该是一个JObject 。 事实certificate, JObject已经实现了IDictionary ,因此您可以将其用作没有任何转换的字典,如下所示:

 string json = @"{ ""blah"" : { ""2"" : ""foo"", ""5"" : ""bar"", ""8"" : ""foobar"" } }"; var dict = JsonConvert.DeserializeObject>(json); dynamic dyn = dict["blah"]; Console.WriteLine(dyn.GetType().FullName); // Newtonsoft.Json.Linq.JObject Console.WriteLine(dyn["2"].ToString()); // foo 

如果你想要一个Dictionary ,你可以像这样转换它:

 Dictionary newDict = ((IEnumerable>)dyn) .ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToString()); 

您可以使用reflection填充字典:

 public Dictionary Dyn2Dict(dynamic dynObj) { var dictionary = new Dictionary(); foreach (PropertyDescriptor propertyDescriptor in TypeDescriptor.GetProperties(dynObj)) { object obj = propertyDescriptor.GetValue(dynObj); dictionary.Add(propertyDescriptor.Name, obj); } return dictionary; } 

您可以使用Json.Net将其反序列化为字典。

 string json = dynamicObject.ToString(); // suppose `dynamicObject` is your input Dictionary dictionary = JsonConvert.DeserializeObject>(json); 

另一种方法是使用.NET 4.5中包含的System.Web.Helpers.Json。

Json.Encode(对象)和Json.Decode。 喜欢:

 Json.Decode>(value); 

MSDN: https : //msdn.microsoft.com/en-us/library/gg547931(v = vs111).aspx ? cs-save-lang = 1& ct-lang = csharp#code- snippet-1

此致,MarianoC。

你可以用jsonSerializer做到这一点。 它需要System.Net.Extensions参考。 这是一个示例代码。

 var jss = new JavaScriptSerializer(); var dict = jss.Deserialize>(jsonText); var place = dict["8"]; // "foobar"