我在Windows Mobile上使用紧凑型框架/C#。

在我的应用程序中,我通过序列化对象并使用HttpWebRequest/POST请求向上发送信息,从而将数据上传到服务器。在服务器上,帖子数据被反序列化并保存到数据库中。

前几天,我意识到我在帖子数据中出现特殊字符(“&”符号等)时遇到了问题。因此,我将Uri.EscapeDataString()引入该方法,一切都很好。

但是,今天我发现,当应用程序尝试上传大量数据时存在一个问题(我不确定目前确切表示“大”!)

现有代码(种类)

var uploadData = new List<Things>();

uploadData.Add(new Thing() { Name = "Test 01" });
uploadData.Add(new Thing() { Name = "Test 02" });
uploadData.Add(new Thing() { Name = "Test with an & Ampersand " }); // Do this a lot!!

var postData = "uploadData=" + Uri.EscapeDataString(JsonConvert.SerializeObject(uploadData, new IsoDateTimeConverter()));

问题

对Uri.EscapeDataString()的调用导致以下异常:



问题

还有其他准备上传数据的方法吗?

据我所知,HttpUtility(具有自己的Encode/Decode方法)不适用于紧凑型框架。

最佳答案

或者,您可以简单地拆分字符串并为每个块调用Uri.EscapeDataString(string),以避免重新实现该功能。

示例代码:

        String value = "large string to encode";
        int limit = 2000;

        StringBuilder sb = new StringBuilder();
        int loops = value.Length / limit;

        for (int i = 0; i <= loops; i++)
        {
            if (i < loops)
            {
                sb.Append(Uri.EscapeDataString(value.Substring(limit * i, limit)));
            }
            else
            {
                sb.Append(Uri.EscapeDataString(value.Substring(limit * i)));
            }
        }

07-27 13:23