如何删除 JSON 字符串中的开始和结束双引号以及所有反斜杠 - C#
How to remove opening and closing double quotes and all backslashes in a JSON string - C#
为了使用 C# 执行休息 API 调用,我必须序列化带有参数的字典。这些参数必须作为 JSON 放在请求正文中。
API 调用是在 RestSharp 的帮助下完成的。并使用 fiddler 检查发送字符串。
request.AddBody(_jsonrequeststring);
问题是 API 非常挑剔,它不接受断点(反斜杠)并且不接受 [=42= 开头和结尾的双引号] 字符串。
这就是它的预期:
{
"ConsumerToken":"aconsumertoken",
"UserId":"email@web.com",
"PasswordSha256Base64":"apassword"
}
这就是我要发送的内容:
"{ConsumerToken:\"aconsumertoken\",UserId:\"email@web.com\",PasswordSha256Base64:\"apassword\"}"
我可以删除 \" 但是当它发送该字符串时它也会 returns 一个错误。
"{ConsumerToken:aconsumertoken,UserId:email@web.com,PasswordSha256Base64:apassword}"
甚至可以只删除 \ 和左右双引号吗?如果是这样怎么办?我似乎无法理解它。
完整调用:
userhandler.cs
public static object Login(string uname, string pass, string conTok)
{
Dictionary<string, string> loginDictionary =
new Dictionary<string, string>();
loginDictionary.Add("ConsumerToken", conTok);
loginDictionary.Add("UserId", uname);
loginDictionary.Add("PasswordSha256Base64", pass);
string jsonRequestString = JsonConvert.SerializeObject(loginDictionary);
Proxy proxy = new Proxy(jsonRequestString);
return proxy.Execute();
}
Proxy.cs
public class Proxy
{
const string BaseUrl = "API url";
const string ActionUrl = "API action url";
string _jsonrequeststring;
public Proxy(string json)
{
_jsonrequeststring = json;
}
public Object Execute()
{
var client = new RestClient(BaseUrl);
var request = new RestRequest(ActionUrl);
request.RequestFormat = DataFormat.Json;
request.AddBody(_jsonrequeststring);
request.Method = Method.POST;
var response = client.Execute(request);
var content = response.Content;
return content;
}
}
您似乎将正文内容添加为字符串,这意味着它会被 RestSharp 编码为字符串。如果可能,尝试添加对象本身并让 RestSharp 处理序列化等:
var obj = new {
ConsumerToken = "aconsumertoken",
UserId = "email@web.com",
PasswordSha256Base64 = "apassword"
};
request.AddBody(obj);
如果出于某种原因必须使用预序列化的 JSON 字符串,您应该可以这样做:
request.AddParameter("application/json", _jsonrequeststring, ParameterType.RequestBody);
[注意:我还没有实际测试过这些建议中的任何一个,但我认为它们应该可以解决问题]
为了使用 C# 执行休息 API 调用,我必须序列化带有参数的字典。这些参数必须作为 JSON 放在请求正文中。
API 调用是在 RestSharp 的帮助下完成的。并使用 fiddler 检查发送字符串。
request.AddBody(_jsonrequeststring);
问题是 API 非常挑剔,它不接受断点(反斜杠)并且不接受 [=42= 开头和结尾的双引号] 字符串。
这就是它的预期:
{
"ConsumerToken":"aconsumertoken",
"UserId":"email@web.com",
"PasswordSha256Base64":"apassword"
}
这就是我要发送的内容:
"{ConsumerToken:\"aconsumertoken\",UserId:\"email@web.com\",PasswordSha256Base64:\"apassword\"}"
我可以删除 \" 但是当它发送该字符串时它也会 returns 一个错误。
"{ConsumerToken:aconsumertoken,UserId:email@web.com,PasswordSha256Base64:apassword}"
甚至可以只删除 \ 和左右双引号吗?如果是这样怎么办?我似乎无法理解它。
完整调用:
userhandler.cs
public static object Login(string uname, string pass, string conTok)
{
Dictionary<string, string> loginDictionary =
new Dictionary<string, string>();
loginDictionary.Add("ConsumerToken", conTok);
loginDictionary.Add("UserId", uname);
loginDictionary.Add("PasswordSha256Base64", pass);
string jsonRequestString = JsonConvert.SerializeObject(loginDictionary);
Proxy proxy = new Proxy(jsonRequestString);
return proxy.Execute();
}
Proxy.cs
public class Proxy
{
const string BaseUrl = "API url";
const string ActionUrl = "API action url";
string _jsonrequeststring;
public Proxy(string json)
{
_jsonrequeststring = json;
}
public Object Execute()
{
var client = new RestClient(BaseUrl);
var request = new RestRequest(ActionUrl);
request.RequestFormat = DataFormat.Json;
request.AddBody(_jsonrequeststring);
request.Method = Method.POST;
var response = client.Execute(request);
var content = response.Content;
return content;
}
}
您似乎将正文内容添加为字符串,这意味着它会被 RestSharp 编码为字符串。如果可能,尝试添加对象本身并让 RestSharp 处理序列化等:
var obj = new {
ConsumerToken = "aconsumertoken",
UserId = "email@web.com",
PasswordSha256Base64 = "apassword"
};
request.AddBody(obj);
如果出于某种原因必须使用预序列化的 JSON 字符串,您应该可以这样做:
request.AddParameter("application/json", _jsonrequeststring, ParameterType.RequestBody);
[注意:我还没有实际测试过这些建议中的任何一个,但我认为它们应该可以解决问题]