Итерация через динамический объект
Используя mvc, я получаю такие значения, чтобы избежать деклараций классов и изменений маршрутизатора.
public dynamic Create([FromBody] dynamic form)
{
var username = form["username"].Value;
var password = form["password"].Value;
var firstname = form["firstname"].Value;
...
Мне нравится перебирать все значения и проверять их на нуль или пусто.
Ответы
Ответ 1
Если вы получите json
из аргумента, вы можете преобразовать его в Dictionary<string, dynamic>
, где клавиша string
- это имя свойства, а dynamic
- это значение, которое может принимать любой тип. Для образца:
var d = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(form);
var username = d["username"];
Вы также можете переключаться между свойством Keys
из Dictionary<>
:
foreach(var key in d.Keys)
{
// check if the value is not null or empty.
if (!string.IsNullOrEmpty(d[key]))
{
var value = d[key];
// code to do something with
}
}
Ответ 2
Это довольно старый, но я натолкнулся на это и задаюсь вопросом, почему следующее не было предложено:
var data = (IDictionary<string, object>)form;
Ответ 3
Вы можете использовать JavaScriptSerializer и динамический объект:
JavaScriptSerializer serializer = new JavaScriptSerializer();
dynamic myDynamicObject = serializer.DeserializeObject(json);
Например, если вы хотите выполнить цикл через myDynamicObject["users"]
:
foreach (KeyValuePair<string, dynamic> user in myDynamicObject["users"]){
Console.WriteLine(user.Key+": "+user.Value["username"]);
Console.WriteLine(user.Key+": "+user.Value["email"]);
}