C# 遍历动态表单对象

C# 遍历动态表单对象,c#,asp.net,asp.net-mvc,asp.net-mvc-4,dynamic,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Dynamic,使用mvc,我得到这样的值,以避免类声明和路由器更改 public dynamic Create([FromBody] dynamic form) { var username = form["username"].Value; var password = form["password"].Value; var firstname = form["firstname"].Value; ... 我喜欢遍历所有值并检查它们是否为null或空。如果从参数中获得json,则可

使用mvc,我得到这样的值,以避免类声明和路由器更改

public dynamic Create([FromBody] dynamic form)
{
    var username = form["username"].Value;
    var password = form["password"].Value;
    var firstname = form["firstname"].Value;
...

我喜欢遍历所有值并检查它们是否为null或空。

如果从参数中获得
json
,则可以将其转换为
字典,其中
字符串
键是属性的名称,
动态
是可以采用任何类型的值。对于示例:

var d = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(form);

var username = d["username"];

这是很古老的,但我遇到了这一点,我想知道为什么没有提出以下建议:

var data = (IDictionary<string, object>)form;
var数据=(IDictionary)形式;

您可以使用JavaScriptSerializer和动态对象:

JavaScriptSerializer serializer = new JavaScriptSerializer();

dynamic myDynamicObject = serializer.DeserializeObject(json);
例如,如果您想在
myDynamicObject[“用户”]
中循环:

foreach(myDynamicObject[“用户”]中的KeyValuePair用户){
Console.WriteLine(user.Key+”:“+user.Value[“username”]);
Console.WriteLine(user.Key+“:”+user.Value[“email”]);
}

s/“我喜欢”/“我喜欢,但不知道怎么做”?您想避免类声明吗?为什么?@doctorlove也许听起来更好。我不确定你的意图。转到foreach(表单中的var值)。用于从视图获取输入。很容易实现您到底想要迭代什么?你的对象的实际属性,或者它是否有索引器,而你只是想检查所有被索引的东西?还没有机会测试它,但看起来很可靠。当时应该测试它,因为它会引发异常。为我工作!!那正是我要找的!可能是因为:Message“无法将类型'f_uanonymoustype0'转换为'System.Collections.Generic.IDictionary'”字符串。@Jay,如果您收到该消息,您不是在对动态对象强制转换,而是试图对与此不同的匿名类型强制转换。我使用'dynamic form'运行了该语句,就像在OP中一样,我最终使用JsonConvert将动态转换为json,然后JsonConvert将json转换为字典。这对我来说很好。
JavaScriptSerializer serializer = new JavaScriptSerializer();

dynamic myDynamicObject = serializer.DeserializeObject(json);
foreach (KeyValuePair<string, dynamic> user in myDynamicObject["users"]){
    Console.WriteLine(user.Key+": "+user.Value["username"]);
    Console.WriteLine(user.Key+": "+user.Value["email"]);
}