У меня есть динамический объект, который выглядит так:
{
"2" : "foo",
"5" : "bar",
"8" : "foobar"
}
Как я могу преобразовать это в dictionary
?
У меня есть динамический объект, который выглядит так:
{
"2" : "foo",
"5" : "bar",
"8" : "foobar"
}
Как я могу преобразовать это в dictionary
?
Вы можете использовать RouteValueDictionary
для преобразования объекта С# в словарь. См. Класс RouteValueDictionary - MSDN. Он преобразует свойства object
в пары ключ-значение.
Используйте его так:
var toBeConverted = new {
foo = 2,
bar = 5,
foobar = 8
};
var result = new RouteValueDictionary(toBeConverted);
Если указанное динамическое значение было создано путем десериализации из Json.Net, как вы упомянули в своих комментариях, тогда это должно быть JObject
. Оказывается, что JObject
уже реализует IDictionary<string, JToken>
, поэтому вы можете использовать его в качестве словаря без преобразования, как показано ниже:
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
Если вы предпочитаете использовать Dictionary<string, string>
, вы можете преобразовать его следующим образом:
Dictionary<string, string> newDict =
((IEnumerable<KeyValuePair<string, JToken>>)dyn)
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToString());
Вы можете заполнить словарь, используя отражение:
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;
}
Вы можете использовать Json.Net, чтобы десериализовать его в словаре.
string json = dynamicObject.ToString(); // suppose `dynamicObject` is your input
Dictionary<string, string> dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
Другой способ - использовать System.Web.Helpers.Json, включенный в .NET 4.5.
Json.Encode(объект) и Json.Decode. Как:
Json.Decode<Generic.Dictionary<string, string>>(value);
С уважением, MarianoC.
Вы можете сделать это с помощью jsonSerializer. И для этого требуется ссылка System.Net.Extensions. Вот пример кода.
var jss = new JavaScriptSerializer();
var dict = jss.Deserialize<Dictionary<string,string>>(jsonText);
var place = dict["8"]; // "foobar"
Очень похоже на ema answer, но с однострочным использованием LINQ magic:
Dictionary<string, object> myDict = sourceObject.GetType().GetProperties().ToDictionary(prop => prop.Name, prop => prop.GetValue(sourceObject, null));