我知道已经有一个非常类似的问题here,但不幸的是,顶部的答案没有帮助我。
我想通过Unity Webrequest将一些数据POST
到一个RESTful Web服务。postData
中的数据将被转义,然后通过System.Text.Encoding.UTF8解释为字节流。postData
中的数据以JSON格式存储。远程Web服务将使用NewtonSoft.Json
对所有传入数据进行反序列化。
不幸的是,远程Web服务抛出一个JsonReaderException
,消息为"Unexpected character encountered while parsing value: %. Path '', line 0, position 0."
这是因为发送的数据看起来像这样的字符串(截断):
%7b%22日志类型%22%3a%22钻取%22%2c%22操作%22%3a%22已启动%22%2c%22描述%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%22日志类型%22%3a%22钻取%22%2c%22操作%22%3a%22已启动%22%2c%22描述%22%3a%22...
我应该做些什么来确保远程Web服务可以成功地反序列化它接收到的数据?
2条答案
按热度按时间flvtvl501#
你收到的数据是URL encoded。
例如:
%22
是"
%3a
是:
因此,接收到的URL编码字符串的开头是:
{"LogType":"Drill"
这显然是有效的JSON字符串。
因此,您需要做的是将其url decode为常规JSON字符串,然后使用JSON.NET对其进行反序列化。
dxxyhpgq2#