8

好的,

我正在使用System.Runtime.SerializationDataContractJsonSerialization

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

我认为转义将在库内完成,但现在我看到序列化未触及 &&字符。

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

HttpUtility.HtmlEncodeSystem.Web图书馆里,所以要走的路是使用Uri.EscapeUriString. 我这样做是为了尝试,但无论如何,如果没有它,所有请求都可以正常工作,除了&符号在一个值中。

编辑:HttpUtility类被移植到 Windows Phone SDK,但编码字符串的首选方式应该是Uri.EscapeUriString.

第一个想法是弄脏手并开始替换会导致服务器出现问题的特殊字符,但是,我想知道我应该做的另一种解决方案是高效且“正确”的吗?

我应该告诉我使用

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

将 JSON 转换为 abyte[]并写入Stream. 和,

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

作为WebRequest.ContentType.

那么,我是因为什么原因而搞砸了还是我想念什么?

谢谢你。

4

2 回答 2

9

问题是我正在编码整个请求字符串,包括密钥。我有一个请求data={JSON},我正在格式化它,但该{JSON}部分应该只被编码。

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

愚蠢的洞要踏入。

于 2013-09-10T16:11:56.600 回答
4

您是否尝试过用&POST 替换 & 符号?

于 2013-09-09T22:16:32.430 回答