Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将NameValueCollection转换为动态对象_C#_Asp.net Mvc - Fatal编程技术网

C# 将NameValueCollection转换为动态对象

C# 将NameValueCollection转换为动态对象,c#,asp.net-mvc,C#,Asp.net Mvc,我试图获取一个传递给ASP.NET MVC控制器的FormCollection,并将其转换为动态对象,然后将其序列化为Json并传递给我的Web API [HttpPost] public ActionResult Create(FormCollection form) { var api = new MyApiClient(new MyApiClientSettings()); dynamic data = new ExpandoObj

我试图获取一个传递给ASP.NET MVC控制器的FormCollection,并将其转换为动态对象,然后将其序列化为Json并传递给我的Web API

    [HttpPost]
    public ActionResult Create(FormCollection form)
    {
        var api = new MyApiClient(new MyApiClientSettings());

        dynamic data = new ExpandoObject();

        this.CopyProperties(form, data); // I would like to replace this with just converting the NameValueCollection to a dynamic

        var result = api.Post("customer", data);

        if (result.Success)
            return RedirectToAction("Index", "Customer", new { id = result.Response.CustomerId });

        ViewBag.Result = result;

        return View();
    }

    private void CopyProperties(NameValueCollection source, dynamic destination)
    {
        destination.Name = source["Name"];
        destination.ReferenceCode = source["ReferenceCode"];
    }
我见过将动态对象转换为字典或NameValueCollection的示例,但需要换一种方式


任何帮助都将不胜感激。

谷歌快速搜索发现:

因此,您可以:

IDictionary<string, string> dict = new Dictionary<string, string> { { "Foo", "Bar" } };
dynamic dobj = dict.ToExpando();
dobj.Foo = "Baz";
IDictionary dict=新字典{{{“Foo”,“Bar”};
动态dobj=dict.ToExpando();
dobj.Foo=“Baz”;

这就是您要找的吗?

我已经在下面演示了如何创建和使用动态字典/keyvaluepair。我添加了一个扩展方法来将字典转换为
NameValueCollection

这对我来说非常有效,但有一点您应该注意,Dictionary不允许重复键,
NameValueCollection
允许重复键。因此,如果您尝试移动到字典,可能会引发异常

void Main()
{
    dynamic config = new ExpandoObject();
    config.FavoriteColor = ConsoleColor.Blue;
    config.FavoriteNumber = 8;
    Console.WriteLine(config.FavoriteColor);
    Console.WriteLine(config.FavoriteNumber);

    var nvc = ((IDictionary<string, object>) config).ToNameValueCollection();
    Console.WriteLine(nvc.Get("FavoriteColor"));
    Console.WriteLine(nvc["FavoriteNumber"]);
    Console.WriteLine(nvc.Count);
}

public static class Extensions
{
    public static NameValueCollection ToNameValueCollection<TKey, TValue>(this IDictionary<TKey, TValue> dict)
    {
        var nvc = new NameValueCollection();
        foreach(var pair in dict)
        {
            string value = pair.Value == null ? null : value = pair.Value.ToString();
            nvc.Add(pair.Key.ToString(), value);
        }

        return nvc;
    }

}
void Main()
{
动态配置=新的ExpandooObject();
config.FavoriteColor=ConsoleColor.Blue;
config.FavoriteNumber=8;
Console.WriteLine(config.FavoriteColor);
Console.WriteLine(config.FavoriteNumber);
var nvc=((IDictionary)config.tonNameValueCollection();
Console.WriteLine(nvc.Get(“FavoriteColor”);
Console.WriteLine(nvc[“FavoriteNumber]”);
控制台写入线(nvc计数);
}
公共静态类扩展
{
公共静态名称ValueCollection到NameValueCollection(此IDictionary dict)
{
var nvc=新的NameValueCollection();
foreach(dict中的var对)
{
字符串值=pair.value==null?null:value=pair.value.ToString();
添加(pair.Key.ToString(),value);
}
返回nvc;
}
}

你能说说你想要实现什么吗?我猜你想要的是两行代码,将集合变成一个ExpandooObject?你想要这样的东西吗?我试着回答你的问题是的。。。只需首先将NameValueCollection转换为字典。