【发布时间】:2021-08-31 06:10:33
【问题描述】:
我正在与旧 API 进行集成,由于某种原因,该 API 将 json 数据作为文本/html 响应返回。我曾尝试在 C# 中使用 Newtonsoft 反序列化此字符串,并使用包括 JSON.parse() 在内的各种 javascript 库,但都失败了。
实际响应看起来像一个有效的 json 对象,但它无法反序列化:
{"err":201,"errMsg":"We cannot find your account.\uff01","data":[],"selfChanged":{}}
我认为存在一些特殊字符,或者实际响应的格式是我的任何解析器都无法反序列化开箱即用的格式。我附上了各种语言的各种代码示例,包括 curl。如果有人可以帮助反序列化 C# 中的响应对象或为我指明正确的方向,我将不胜感激。
C#
var client = new RestClient("http://47.89.182.211:8080/index.php/account/login");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("appVersion", "0");
request.AddParameter("password", "xxxxxx");
request.AddParameter("platform", "5");
request.AddParameter("platformId", "xxx@xxx.com");
request.AddParameter("userType", "4");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Java
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.post("http://47.89.182.211:8080/index.php/account/login")
.header("Accept", "application/json")
.header("Content-Type", "application/x-www-form-urlencoded")
.field("appVersion", "0")
.field("password", "xxxxxx")
.field("platform", "5")
.field("platformId", "xxx@xxx.com")
.field("userType", "4")
.asString();
Javascript
var data = "appVersion=0&password=xxxxxx&platform=5&platformId=xxx%40xxx.com&userType=4";
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function() {
if(this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("POST", "http://47.89.182.211:8080/index.php/account/login");
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(data);
卷曲
curl --location --request POST 'http://47.89.182.211:8080/index.php/account/login' \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'appVersion=0' \
--data-urlencode 'password=xxxxxx' \
--data-urlencode 'platform=5' \
--data-urlencode 'platformId=xxx@xxx.com' \
--data-urlencode 'userType=4'
如果您能够将响应解析为有效的 json 对象或将其反序列化为 C# 或 Java 对象,请告诉我。
【问题讨论】:
-
第一个字符就是问题所在。这是一个零宽度的空间:compart.com/de/unicode/U+FEFF 如果你删除第一个字符,你可以解析其余的就好了。
标签: javascript java c# json