我知道已经有一个非常相似的问题here,但是不幸的是,最重要的答案对我没有帮助。
我想通过Unity Webrequest POST
向RESTful Web服务添加一些数据。正如the documentation所说,
postData
中的数据将被转义,然后解释为一个字节 通过System.Text.Encoding.UTF8流。
postData
中的数据以JSON格式存储。远程Web服务将使用NewtonSoft.Json
反序列化所有传入的数据。
不幸的是,远程Web服务抛出JsonReaderException
,并显示消息"Unexpected character encountered while parsing value: %. Path '', line 0, position 0."
,这是因为发布的数据看起来像这样(被截断的字符串):
%7b%22LogType%22%3a%22Drill%22%2c%22Action%22%3a%22Started%22%2c%22Description%22%3a%22 ...
在调用Newtonsoft.Json
库进行反序列化之前,我试图将UTF-8中的传入数据转换为ASCII:
byte[] contentBytes = await Request.Content.ReadAsByteArrayAsync();
string postContents = Encoding.ASCII.GetString(Encoding.Convert(Encoding.UTF8, Encoding.ASCII, contentBytes));
但是,JsonReaderException
仍然会抛出,因为postContents
仍然看起来像这样:
%7b%22LogType%22%3a%22Drill%22%2c%22Action%22%3a%22Started%22%2c%22Description%22%3a%22 ...
我该怎么做才能确保远程Web服务可以成功地反序列化接收到的数据?
答案 0 :(得分:1)
您收到的数据是URL encoded。
例如:
%7b
是{
%22
是"
%3a
是:
因此,接收到的URL编码字符串的开头是:
{"LogType":"Drill"
这显然是有效的JSON字符串。
因此,您需要做的是url decode将其转换为常规JSON字符串,然后使用JSON.NET将其反序列化。