【发布时间】:2017-12-13 18:06:08
【问题描述】:
我需要将包含数组的对象模型序列化为查询字符串,我有以下代码:
public static string ToQueryString(this object query)
{
var result = new List<string>();
var properties = query.GetType().GetProperties().Where(p => p.GetValue(query, null) != null && p.GetValue(query, null).ToString() != "0");
foreach (var p in properties)
{
var value = p.GetValue(query, null);
var collection = value as ICollection;
if (collection != null)
{
result.AddRange(from object o in collection select string.Format("{0}={1}", p.Name, HttpUtility.UrlEncode(o.ToString())));
}
else
{
result.Add($"{p.Name}={HttpUtility.UrlEncode(value.ToString())}");
}
}
return string.Join("&", result.ToArray());
}
以及以下示例模型:
var model = new exampleModel()
{
OrderBy = "name",
OrderByDesc = true,
PersonName= "John",
Languages = new string[] { "French", "English", "Spanish" }
};
当模型被序列化时,查询字符串的转换如下:
"OrderBy=name&OrderByDesc=true&PersonName=John&Languages=French&Languages=English&Languages=Spanish"
正如您所见,这是不可取的,因为对于集合中的每个值,查询字符串中都会重复属性“语言”。有谁知道我怎样才能获得查询字符串,例如:
"OrderBy=name&OrderByDesc=true&PersonName=John&Languages=法语、英语、西班牙语"
【问题讨论】:
-
注意:如果你想尽量减少水平滚动的需要,你可以通过选择代码的相关部分,然后点击编辑器顶部的
[{ }]按钮来减少缩进。
标签: c# serialization query-string