Uri.UnescapeDataString对象的所有属性?

时间:2014-04-30 23:29:01

标签: c#

我有一些对象,其中一些属性是URLEncoded。

Uri.UnescapeDataString对象的所有属性的最快方法是什么?

1 个答案:

答案 0 :(得分:0)

不清楚你会达到什么目标。假设您想要自动化解码过程,并且不希望单独调用每个属性并对其进行解码。 迭代类属性的方法是反射。实际上,反思从未如此迅速。但它也不清楚,你的意思是“最快”。

以下是如何使用反射实现它的简短示例:

public class DecoderTests
{
    public String OneItem { get; set; }

    public String SecondItem { get; set; }

    public String ThirdClean { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        var ddd = Uri.EscapeUriString("Http://google tes.com");
        var decod = new DecoderTests
        {
            OneItem = ddd.ToString(),
            SecondItem = ddd.ToString(),
            ThirdClean = "clean"
        };

        PropertyInfo[] properties = typeof(DecoderTests).GetProperties();
        foreach (PropertyInfo property in properties)
        {
            var current = property.GetValue(decod) as String;
            if (!String.IsNullOrEmpty(current))
            {
                property.SetValue(decod, Uri.UnescapeDataString(current));
            }
        }
    }
}

或者只是单独调用每个属性并对其进行解码。像Regex.Unescape或HttpUtility.UrlDecode这样的Uri.UnescapeDataString的所有替代方案都会执行得慢得多。