将动态类型转换为字典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"