Web客户端无法解释在WP7中正确输入字符

时间:2011-07-31 17:52:04

标签: windows-phone-7 textbox webclient character enter

我使用WebClient.UploadStringAsync方法遇到了问题。我要向外部服务器发送带有一些信息的POST请求,并且在该请求中,我要将文本包含在TextBox中。

我所做的是以下内容:

Uri url = new Uri("http://www.someweb.com");
string request = "{\"requests\":[\"sendMessage\",{\"body\":\"" + newMessageTextBox.Text + "\"}]}";

WebClient wb = new WebClient();
wb.UploadStringCompleted += new UploadStringCompletedEventHandler(nb_UploadStringCompleted);
wb.UploadStringAsync(url, "Post", request);

没有问题,但是如果我包含带有返回的消息,就像 “你好

大家” 服务器发回错误。如果我用Wireshark嗅探我的流量,我可以看到我的POST请求,但它如下:

  

“{” 请求 “:[” 的sendMessage “{ ”体“:” 你好

     

大家 “}]}”

虽然我想发送的是

  

“{” 请求 “:[” 的sendMessage “{ ”体“: ”你好\ n \ neverybody“}]}”

任何想法??

谢谢大家

1 个答案:

答案 0 :(得分:0)

是的,您需要执行适当的JSON转义。就个人而言,我会使用JSON库 - 我在Windows Phone 7中使用过Json.NET并且它工作正常。

您将您的请求构建为JSON对象 - 因此根本不指定JSON文本表单本身 - 然后要求它将自身格式化为字符串(仅通过调用ToString)。例如:

using System;
using Newtonsoft.Json.Linq;

class Program
{
    static void Main(string[] args)
    {
        string text = "Hello\neverybody";

        JObject json = new JObject 
        {
            { "requests", new JArray 
                {
                    new JObject
                    {
                        { "sendMessage", new JObject 
                            {
                                { "body", text }
                            }
                        }
                    }
                }
            }
        };

        Console.WriteLine(json);
    }
}

输出:

{
  "requests": [
    {
      "sendMessage": {
        "body": "Hello\neverybody"
      }
    }
  ]
}

(显然你不需要使用那么多的空格,如果你不想这样做。你也不必使用对象初始化器。)

编辑:好的,根据要求进行更改:

JObject json = new JObject 
{
    { "sid", sid },
    { "version", "0.6" },
    { "requests", new JArray 
        {
            new JArray
            {
                new JObject
                {
                    { "sendMessage", new JObject 
                        {
                            { "body", text },
                            { "recipient", recipient },
                            { "legacy", false },
                            { "thread_key", threadKey }
                        }
                    }
                }
            }
        }
    }
};

结果:

{
  "sid": "sid",
  "version": "0.6",
  "requests": [
    [
      {
        "sendMessage": {
          "body": "Hello\neverybody",
          "recipient": "foo@bar.com",
          "legacy": false,
          "thread_key": "T1"
        }
      }
    ]
  ]
}