解析URL数组参数到c#字典

本文关键字:字典 参数 URL 数组 解析 | 更新日期: 2023-09-27 18:03:48

我有以下代码来解析url中的键值对:

    public static NameValueCollection ParseQueryString(String query)
    {
        NameValueCollection queryParameters = new NameValueCollection();
        string[] querySegments = query.Split('&');
        foreach (string segment in querySegments)
        {
            string[] parts = segment.Split('=');
            if (parts.Length > 0)
            {
                string key = parts[0].Trim(new char[] { '?', ' ' });
                string val = parts[1].Trim();
                queryParameters.Add(key, val);
            }
        }
        return queryParameters;
    }

我像这样使用这个函数:

args = ParseQueryString("alpha=1&beta=bbbb&array%5B0%5D%5Ba%5D=1&array%5B0%5D%5Bb%5D=2&array%5B1%5D%5Ba%5D=1&array%5B1%5D%5Bb%5D=2&array%5B%5D=3&array%5B%5D=4");
foreach (var k in args.AllKeys)
{
    tw.WriteLine(k + ": " + args[k]);
}
输出:

alpha: 1
beta: bbbb
array[0][a]: 1
array[0][b]: 2
array[1][a]: 1
array[1][b]: 2
array[]: 3,4

我需要一个嵌套的NameValueCollections或嵌套字典的输出,这样我就可以像这样访问这些值:

args = ParseQueryString("alpha=1&beta=bbbb&array%5B0%5D%5Ba%5D=1&array%5B0%5D%5Bb%5D=2&array%5B1%5D%5Ba%5D=1&array%5B1%5D%5Bb%5D=2&array%5B%5D=3&array%5B%5D=4");
var item = args.Get("array").Get(0).Get("b"); // will be "2"

实现这一点的最优雅的方法是什么?我更喜欢没有系统的解决方案。Web或任何额外的参考

解析URL数组参数到c#字典

如果您使用ASP。. NET MVC框架中,默认的MVC参数绑定器可以通过以下方式自动处理它:

// GetData?filters[0][field]=fieldName&filters[0][type]=number&filters[0][value]=3
public ActionResult GetData(IEnumerable<Dictionary<string,string>> filters) 
{
    // todo
}

要了解更多信息和示例,请查看我写的关于这个主题的博客文章