正确的方法来处理JSON字符串中的&符号发送到REST Web服务

时间:2013-09-09 22:10:41

标签: c# json windows-phone-8 httpwebrequest datacontractjsonserializer

行,

我使用的是System.Runtime.SerializationDataContractJsonSerialization

问题是在请求中我发送了一个带有&字符的属性值。说,AT&T,我收到错误的回复:Invalid JSON Data

我认为转义将在库内完成,但现在我发现序列化不会触及&符号&字符。

是的,对于JSON格式,这是有效的。 但是这对我的POST请求来说是一个问题,因为我需要将它发送到一个服务器,如果包含一个&符号会响应错误,因此我就是这样。

HttpUtility.HtmlEncode位于System.Web库中,因此可以使用Uri.EscapeUriString。我这样做是为了尝试,但无论如何,没有它,所有请求都正常工作,除了一个&符号值。

编辑:HttpUtility类移植到Windows Phone SDK,但编码字符串的首选方法仍然是Uri.EscapeUriString

首先想到的是弄脏并开始更换会导致服务器出现问题的特殊字符,但是,我想知道,我应该做的另一个解决方案是,它是否有效且“正确”?

我应该告诉我使用

// Convert the string into a byte array.
byte[] postBytes = Encoding.UTF8.GetBytes(data);

将JSON转换为byte[]并写入Stream。 和,

request.ContentType = "application/x-www-form-urlencoded";

作为WebRequest.ContentType

所以,我是因为某种原因而错过了吗?

谢谢。

2 个答案:

答案 0 :(得分:5)

问题是我正在编码整个请求字符串,包括密钥。 我收到了data={JSON}请求,我正在对其进行格式化,但{JSON}部分只能进行编码。

string requestData = "data=" + Uri.EncodeDataString(json) // worked perfect!

愚蠢的洞进入。

答案 1 :(得分:2)

您是否尝试使用&替换&符号进行POST?