我复制了这段代码,形式为StackOverlow问题here,但是我得到的反馈是它不适用于具有特定日期时间格式的计算机。您是否知道如何优雅地进行修复?
问题在于格式化方法是通用的并且是对象。ToString的CultureInfo参数没有重载。
private string UrlEncodeObject(object o)
{
var properties = from p in o.GetType().GetProperties()
where p.GetValue(o, null) != null
select p.Name + "=" + System.Net.WebUtility.UrlEncode(p.GetValue(o, null).ToString());
string queryString = String.Join("&", properties.ToArray());
return queryString;
}
我希望特定的十进制符号等可能存在类似的问题。
答案 0 :(得分:3)
该代码已经在做很多事情,您不是要将该方法分解为较小的方法吗?
您可以提取一种方法来获取字符串值:
select p.Name + "=" + GetPropertyValue(o, p);
并像这样实现它:
private string GetPropertyValue(PropertyInfo i, object o)
{
var propertyValue = p.GetValue(o, null);
string stringValue;
if (propertyValue.GetType() == typeof(DateTime))
{
stringValue = ((DateTime)propertyValue).ToString(SomeCultureInfo);
}
else
{
stringValue = propertyValue.ToString();
}
return System.Net.WebUtility.UrlEncode(stringValue);
}
当然可以实现各种null检查和其他改进,但是您可以理解。另外,如果属性反过来又是复杂类型怎么办?