【发布时间】:2016-08-16 18:33:58
【问题描述】:
我想将 C# 对象作为查询字符串传递,并且我使用以下代码来获得所需的结果。
class Program
{
public static string GetQueryString(object obj)
{
var properties = from p in obj.GetType().GetProperties()
where p.GetValue(obj, null) != null
select p.Name + "=" + HttpUtility.UrlEncode(p.GetValue(obj, null).ToString());
return String.Join("&", properties.ToArray());
}
static void Main(string[] args)
{
Filters fil = new Filters();
fil.Age = 10;
fil.Id = "some id";
fil.Divisions = new List<string>();
fil.Divisions.Add("div 1");
fil.Divisions.Add("div 2");
fil.Divisions.Add("div 3");
fil.Names = new List<string>();
fil.Names.Add("name 1");
fil.Names.Add("name 2");
fil.Names.Add("name 3");
var queryStr = GetQueryString(fil);
Console.ReadKey();
}
}
public class Filters
{
public List<string> Names { get; set; }
public List<string> Divisions { get; set; }
public int Age { get; set; }
public string Id { get; set; }
}
使用上面的代码给我以下结果:
Names=System.Collections.Generic.List%601%5bSystem.String%5d&Divisions=System.Collections.Generic.List%601%5bSystem.String%5d&Age=10&Id=some+id
输出不是有效的查询字符串。我需要帮助将任何 POCO 类转换为查询字符串格式。
我有一个类似的 JavaScript 对象,我能够将它转换为正确的查询字符串。
{
"id":"some id",
"age":10,
"division":["div 1","div 2","div 3"],
"names":["name 1","name 2","name 3"]
}
使用 Jquery 我可以说 $.param(obj) 这将导致:
"id=some+id&age=10&division%5B%5D=div+1&division%5B%5D=div+2&division%5B%5D=div+3&names%5B%5D=name+1&names%5B%5D=name+2&names%5B%5D=name+3"
我想要使用 c# 的类似输出。
【问题讨论】:
-
1) 为什么查询字符串这么长?为什么不是身份证? 2)如果你有 - 为什么不将它序列化为 JSON 呢?
-
好的,写代码来做。你有什么问题?
-
@RoyiNamir:我需要将此信息作为查询字符串传递给网页。我正在尝试调用一个页面,该页面期望值作为查询字符串传递
-
@EdPlunkett:我添加了一些代码,但没有产生预期的结果
-
进一步了解 Royi - 查询字符串的长度也有限制。您可能需要考虑将其作为有效负载的一部分在 POST 中传递,而不是在 GET 查询字符串中传递。无论如何,您的结果 确实 看起来像一个有效的查询字符串。我认为你的意思是你想要对象的值,但你输出的是类型
标签: c# .net linq c#-4.0 query-string