C# 将NameValueCollection转换为动态对象
我试图获取一个传递给ASP.NET MVC控制器的FormCollection,并将其转换为动态对象,然后将其序列化为Json并传递给我的Web APIC# 将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
[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转换为字典。